Advertisement
Guest User

Untitled

a guest
Oct 28th, 2016
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.58 KB | None | 0 0
  1. #include <winsock2.h>
  2. #include <windows.h>
  3. #include <fcntl.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6. #include <errno.h>
  7. #include <stdio.h>
  8. #include <iostream>
  9. #include <string>
  10. #include "sqlite3.h"
  11.  
  12. using namespace std;
  13.  
  14. int write_log(char *myinput){
  15. char to_write[200];
  16. strcpy(to_write,myinput);
  17. return 0;
  18. }
  19.  
  20. DWORD WINAPI SocketHandler(void*);
  21.  
  22. int main(int argv, char** argc){
  23.  
  24.  
  25. //The port you want the server to listen on
  26. int host_port= 1101;
  27. int addr_size = sizeof(SOCKADDR);
  28.  
  29. //Initialize socket support WINDOWS ONLY!
  30. unsigned short wVersionRequested;
  31. WSADATA wsaData;
  32. int err;
  33. wVersionRequested = MAKEWORD( 2, 2 );
  34. err = WSAStartup( wVersionRequested, &wsaData );
  35. if ( err != 0 || ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 )) {
  36. fprintf(stderr, "Error with sock dll %d\n",WSAGetLastError());
  37. goto FINISH;
  38. }
  39.  
  40. //Initialize sockets and set any options
  41. SOCKET hsock;
  42. int * p_int ;
  43. hsock = socket(AF_INET, SOCK_STREAM, 0);
  44. if(hsock == -1){
  45. printf("Error initializing socket %d\n",WSAGetLastError());
  46. goto FINISH;
  47. }
  48.  
  49. p_int = (int*)malloc(sizeof(int));
  50. *p_int = 1;
  51. if( (setsockopt(hsock, SOL_SOCKET, SO_REUSEADDR, (char*)p_int, sizeof(int)) == -1 )||
  52. (setsockopt(hsock, SOL_SOCKET, SO_KEEPALIVE, (char*)p_int, sizeof(int)) == -1 ) ){
  53. printf("Error setting options %d\n", WSAGetLastError());
  54. free(p_int);
  55. goto FINISH;
  56. }
  57. free(p_int);
  58.  
  59. //Bind and listen
  60. struct sockaddr_in my_addr;
  61.  
  62. my_addr.sin_family = AF_INET ;
  63. my_addr.sin_port = htons(host_port);
  64.  
  65. memset(&(my_addr.sin_zero), 0, 8);
  66. my_addr.sin_addr.s_addr = INADDR_ANY ;
  67.  
  68. if( bind( hsock, (struct sockaddr*)&my_addr, sizeof(my_addr)) == -1 ){
  69. fprintf(stderr,"Error binding to socket, make sure nothing else is listening on this port %d\n",WSAGetLastError());
  70. goto FINISH;
  71. }
  72. if(listen( hsock, 10) == -1 ){
  73. fprintf(stderr, "Error listening %d\n",WSAGetLastError());
  74. goto FINISH;
  75. }
  76.  
  77. //Wait for connection
  78.  
  79. SOCKET csock;
  80. sockaddr_in sadr;
  81.  
  82.  
  83. while(true){
  84. printf("\nWaiting for a connection\n");
  85.  
  86. if((csock = accept( hsock, (SOCKADDR*)&sadr, &addr_size))!= INVALID_SOCKET ){
  87. printf("Connection from %s",inet_ntoa(sadr.sin_addr));
  88.  
  89. //Create Thread for data
  90. CreateThread(0,0,&SocketHandler, (void*) csock , 0,0);
  91. }
  92. else{
  93. fprintf(stderr, "Error accepting %d\n",WSAGetLastError());
  94. }
  95. }
  96.  
  97. FINISH:
  98. ;
  99. }
  100.  
  101. DWORD WINAPI SocketHandler(void* lp){
  102. SOCKET csock = (SOCKET)lp;
  103.  
  104. //Send banner
  105. char banner[1000000];
  106. strcat(banner, "Custom Service v10.4\n");
  107. send(csock, banner, strlen(banner) , 0);
  108.  
  109. char buffer[1000000];
  110. char query[200] = "SELECT * FROM customers WHERE ID = ";
  111. int buffer_len = 1000000;
  112. int bytecount;
  113.  
  114. if((bytecount = recv(csock, buffer, buffer_len, 0))==SOCKET_ERROR){
  115. fprintf(stderr, "Error receiving data %d\n", WSAGetLastError());
  116. }
  117.  
  118. // Create the query
  119. strcat(query,buffer);
  120.  
  121. //Write query to log
  122. write_log(query);
  123.  
  124. //Connect to DB
  125. sqlite3 * db;
  126. sqlite3_open("customers.db3", &db);
  127. sqlite3_stmt *statement;
  128.  
  129. string s;
  130.  
  131. // Get data from DB
  132. if ( sqlite3_prepare(db, query, -1, &statement, 0 ) == SQLITE_OK )
  133. {
  134. int ctotal = sqlite3_column_count(statement);
  135. int res = 0;
  136.  
  137. while ( 1 )
  138. {
  139. res = sqlite3_step(statement);
  140.  
  141. if ( res == SQLITE_ROW )
  142. {
  143. for ( int i = 1; i < ctotal; i++ )
  144. {
  145. s += (char*)sqlite3_column_text(statement, i);
  146. s += " ";
  147. // print or format the output as you want
  148. cout << s << " " ;
  149. }
  150. cout << endl;
  151. }
  152.  
  153. if ( res == SQLITE_DONE || res==SQLITE_ERROR)
  154. {
  155. cout << "done " << endl;
  156. break;
  157. }
  158. }
  159.  
  160. }
  161.  
  162. // Create data to send back
  163. strcat(buffer, "\nParsing results... \nCustomer information: ");
  164.  
  165. char *a=new char[s.size()+1];
  166. a[s.size()]=0;
  167. memcpy(a,s.c_str(),s.size());
  168. strcat(buffer, a);
  169.  
  170. //Send data back
  171. if((bytecount = send(csock, buffer, strlen(buffer), 0))==SOCKET_ERROR){
  172. fprintf(stderr, "Error sending data %d\n", WSAGetLastError());
  173. goto FINISH;
  174. }
  175.  
  176. FINISH:
  177.  
  178. //Close connection
  179. closesocket(csock);
  180.  
  181. printf("Sock cloes\n", bytecount);
  182. return 0;
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement