Merge pull request 'Finished project on Linux' (#3) from dev into master
Reviewed-on: Trianta/proxy-network#3
This commit is contained in:
		
						commit
						15ed6e5c7c
					
				| @ -5,43 +5,9 @@ | |||||||
| #include <cstring> | #include <cstring> | ||||||
| #include <iostream> | #include <iostream> | ||||||
| 
 | 
 | ||||||
| void TestSockets(int sender_s, int receiver_s) { | // Hazardous globals
 | ||||||
| 	char           in_buf[BUF_SIZE];     // Input buffer for GET resquest
 | char hazardous_contents_CS_01[256] = "password.txt"; | ||||||
| 	char           out_buf[BUF_SIZE];    // Output buffer for HTML response
 | char hazardous_contents_CS_02[256] = "admin.config"; | ||||||
| 	ssize_t        buf_len;              // Buffer length for file reads
 |  | ||||||
|                                          //
 |  | ||||||
| 	// Pass GET along from browser to server
 |  | ||||||
|     std::cout << "Attempting to send data to receiver" << std::endl; |  | ||||||
|     do { |  | ||||||
|         buf_len = recv(sender_s, in_buf, BUF_SIZE, 0); |  | ||||||
|         std::cout << "LOG (info) - pipe packet recv size: " << buf_len << std::endl; |  | ||||||
|         if (buf_len == -1) { |  | ||||||
|             std::cout << "ERROR (info) - recv" << std::endl; |  | ||||||
|             return; |  | ||||||
|         } |  | ||||||
|         if (buf_len == 0) { break; } |  | ||||||
|         buf_len = send(receiver_s, in_buf, buf_len, 0); |  | ||||||
|         std::cout << "LOG (info) - pipe packet send size: " << buf_len << std::endl; |  | ||||||
|     } while (buf_len == BUF_SIZE); |  | ||||||
|     std::cout << "Sent data to receiver" << std::endl; |  | ||||||
| 
 |  | ||||||
| 	// Pass response along from server to browser
 |  | ||||||
|     std::cout << "Attempting to send to browser" << std::endl; |  | ||||||
|     do { |  | ||||||
|         buf_len = recv(sender_s, out_buf, BUF_SIZE, 0); |  | ||||||
|         std::cout << "LOG (info) - proxy packet recv size: " << buf_len << std::endl; |  | ||||||
|         if (buf_len == -1) { |  | ||||||
|             std::cout << "ERROR (info) - recv" << std::endl; |  | ||||||
|             return; |  | ||||||
|         } |  | ||||||
|         if (buf_len == 0) { break; } |  | ||||||
|         buf_len = send(receiver_s, out_buf, buf_len, 0); |  | ||||||
|         std::cout << "LOG (info) - proxy packet send size: " << buf_len << std::endl; |  | ||||||
|     } while (buf_len == BUF_SIZE); |  | ||||||
|     std::cout << "Sent to browser" << std::endl; |  | ||||||
|     close(sender_s); |  | ||||||
|     close(receiver_s); |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| void PipeSockets(int sender_s, int receiver_s) { | void PipeSockets(int sender_s, int receiver_s) { | ||||||
| 	char           in_buf[BUF_SIZE];     // Input buffer for GET resquest
 | 	char           in_buf[BUF_SIZE];     // Input buffer for GET resquest
 | ||||||
| @ -61,6 +27,19 @@ void PipeSockets(int sender_s, int receiver_s) { | |||||||
|         } |         } | ||||||
|         if (buf_len == 0) { continue; } |         if (buf_len == 0) { continue; } | ||||||
| 
 | 
 | ||||||
|  |         // Hazardous check
 | ||||||
|  |         if ((strstr(in_buf, hazardous_contents_CS_01) != NULL) | ||||||
|  |                 || (strstr(in_buf, hazardous_contents_CS_02) != NULL)) { | ||||||
|  |             std::cerr << "LOG (warn) - Hazardous contents detected" << std::endl; | ||||||
|  |             strcpy(in_buf, FORBIDDEN_403); | ||||||
|  |             send(sender_s, in_buf, strlen(in_buf), 0); | ||||||
|  |             strcpy(in_buf, MESS_403); | ||||||
|  |             send(sender_s, in_buf, strlen(in_buf), 0); | ||||||
|  |             close(sender_s); | ||||||
|  |             close(receiver_s); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         // Send
 |         // Send
 | ||||||
|         buf_len = send(receiver_s, in_buf, buf_len, 0); |         buf_len = send(receiver_s, in_buf, buf_len, 0); | ||||||
|         std::cout << "LOG (info) - pipe packet send size: " << buf_len << '\n'; |         std::cout << "LOG (info) - pipe packet send size: " << buf_len << '\n'; | ||||||
| @ -74,6 +53,7 @@ void ProxySockets(int sender_s, int receiver_s) { | |||||||
| 	ssize_t        buf_len;              // Buffer length for file reads
 | 	ssize_t        buf_len;              // Buffer length for file reads
 | ||||||
| 
 | 
 | ||||||
| 	// Pass response along from server to browser
 | 	// Pass response along from server to browser
 | ||||||
|  |     sleep(1); | ||||||
|     std::cout << "Attempting to send to browser" << std::endl; |     std::cout << "Attempting to send to browser" << std::endl; | ||||||
|     do { |     do { | ||||||
|         // Receive
 |         // Receive
 | ||||||
| @ -84,6 +64,19 @@ void ProxySockets(int sender_s, int receiver_s) { | |||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         // Hazardous check
 | ||||||
|  |         if ((strstr(out_buf, hazardous_contents_CS_01) != NULL)  | ||||||
|  |                 || (strstr(out_buf, hazardous_contents_CS_02) != NULL)) { | ||||||
|  |             std::cerr << "LOG (warn) - Hazardous contents detected" << std::endl; | ||||||
|  |             strcpy(out_buf, FORBIDDEN_403); | ||||||
|  |             send(receiver_s, out_buf, strlen(out_buf), 0); | ||||||
|  |             strcpy(out_buf, MESS_403); | ||||||
|  |             send(receiver_s, out_buf, strlen(out_buf), 0); | ||||||
|  |             close(sender_s); | ||||||
|  |             close(receiver_s); | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         // Send
 |         // Send
 | ||||||
|         buf_len = send(receiver_s, out_buf, buf_len, 0); |         buf_len = send(receiver_s, out_buf, buf_len, 0); | ||||||
|         if (buf_len == 96) { break; } |         if (buf_len == 96) { break; } | ||||||
|  | |||||||
| @ -9,8 +9,13 @@ | |||||||
| #define kProxyPort      9080 | #define kProxyPort      9080 | ||||||
| #define kWebserverIP    "127.0.0.1" | #define kWebserverIP    "127.0.0.1" | ||||||
| #define kWebserverPort  7080 | #define kWebserverPort  7080 | ||||||
|  | #define FORBIDDEN_403   "HTTP/1.0 403 Forbidden\nContent-Type:text/html\n\n" | ||||||
|  | #define MESS_403    "<html><body><h1>FORBIDDEN ACCESS</h1></body></html>" | ||||||
|  | 
 | ||||||
|  | // Hazardous globals
 | ||||||
|  | extern char hazardous_contents_CS_01[256]; | ||||||
|  | extern char hazardous_contents_CS_02[256]; | ||||||
| 
 | 
 | ||||||
| void TestSockets(int sender_s, int receiver_s); |  | ||||||
| void PipeSockets(int sender_s, int receiver_s); | void PipeSockets(int sender_s, int receiver_s); | ||||||
| void ProxySockets(int sender_s, int receiver_s); | void ProxySockets(int sender_s, int receiver_s); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,18 +1,15 @@ | |||||||
| //----- Include files ---------------------------------------------------------
 | //----- Include files ---------------------------------------------------------
 | ||||||
| #include <algorithm> | #include <algorithm> | ||||||
|  | #include <cstring> | ||||||
| #include <future> | #include <future> | ||||||
| #include <iostream> | #include <iostream> | ||||||
| #include <vector> | #include <vector> | ||||||
| #include "network.hpp" | #include "network.hpp" | ||||||
| 
 | 
 | ||||||
| //----- HTTP response messages ----------------------------------------------
 |  | ||||||
| #define OK_IMAGE    "HTTP/1.0 200 OK\nContent-Type:image/gif\n\n" |  | ||||||
| #define OK_TEXT     "HTTP/1.0 200 OK\nContent-Type:text/html\n\n" |  | ||||||
| #define NOTOK_404   "HTTP/1.0 404 Not Found\nContent-Type:text/html\n\n" |  | ||||||
| #define MESS_404    "<html><body><h1>FILE NOT FOUND</h1></body></html>" |  | ||||||
| 
 |  | ||||||
| int main(void) | int main(void) | ||||||
| { | { | ||||||
|  |     strcpy(hazardous_contents_CS_01, "password.txt"); | ||||||
|  |     strcpy(hazardous_contents_CS_02, "admin.config"); | ||||||
|     std::vector<std::future<void>> pending_futures; |     std::vector<std::future<void>> pending_futures; | ||||||
|     Server proxy(kProxyPort); |     Server proxy(kProxyPort); | ||||||
|     Client browser; |     Client browser; | ||||||
| @ -35,12 +32,6 @@ int main(void) | |||||||
|         auto newThreadRequest2 = std::async(std::launch::async, ProxySockets, webserver.socketFD, browser.socketFD); |         auto newThreadRequest2 = std::async(std::launch::async, ProxySockets, webserver.socketFD, browser.socketFD); | ||||||
|         pending_futures.push_back(std::move(newThreadRequest1)); |         pending_futures.push_back(std::move(newThreadRequest1)); | ||||||
|         pending_futures.push_back(std::move(newThreadRequest2)); |         pending_futures.push_back(std::move(newThreadRequest2)); | ||||||
|         /*
 |  | ||||||
|         auto newThreadRequest = std::async(std::launch::async, TestSockets, browser.socketFD, webserver.socketFD); |  | ||||||
|         pending_futures.push_back(std::move(newThreadRequest)); |  | ||||||
|         std::cout << "Returned from creating threads, continuing..." << std::endl; |  | ||||||
|          */ |  | ||||||
|         //TestSockets(browser.socketFD, webserver.socketFD);
 |  | ||||||
| 	} | 	} | ||||||
|     proxy.Close(); |     proxy.Close(); | ||||||
| 	return 0; | 	return 0; | ||||||
|  | |||||||
| @ -34,7 +34,6 @@ | |||||||
| #include <string.h>         // Needed for strcpy() and strlen()
 | #include <string.h>         // Needed for strcpy() and strlen()
 | ||||||
| #include <fcntl.h>          // Needed for file i/o constants
 | #include <fcntl.h>          // Needed for file i/o constants
 | ||||||
| #include <sys/stat.h>       // Needed for file i/o constants  
 | #include <sys/stat.h>       // Needed for file i/o constants  
 | ||||||
| #include <errno.h> |  | ||||||
| #include <future> | #include <future> | ||||||
| #include <iostream> | #include <iostream> | ||||||
| #include <vector> | #include <vector> | ||||||
| @ -123,6 +122,10 @@ void ClientRequest(int client_s) { | |||||||
| 	retcode = recv(client_s, in_buf, BUF_SIZE, 0); | 	retcode = recv(client_s, in_buf, BUF_SIZE, 0); | ||||||
| 
 | 
 | ||||||
| 	if (retcode == -1) { std::cerr << "ERROR (info) - recv" << std::endl; } | 	if (retcode == -1) { std::cerr << "ERROR (info) - recv" << std::endl; } | ||||||
|  | 	if (retcode == 0) {  | ||||||
|  |         std::cout << "LOG (info) - Webserver received no data" << std::endl; | ||||||
|  |         return; | ||||||
|  |     } | ||||||
| 	// Handle the GET if there is one (see note #3 in the header)
 | 	// Handle the GET if there is one (see note #3 in the header)
 | ||||||
|     // Parse out the filename from the GET request
 |     // Parse out the filename from the GET request
 | ||||||
|     strtok(in_buf, " "); |     strtok(in_buf, " "); | ||||||
|  | |||||||
							
								
								
									
										1
									
								
								test/admin.config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								test/admin.config
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | data=true | ||||||
							
								
								
									
										2
									
								
								test/password.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								test/password.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | |||||||
|  | admin | ||||||
|  | admin123 | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user