Server.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. // Server.cpp: implementation of the CServer class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "cp_main.h"
  6. #include "Server.h"
  7. #ifdef _DEBUG
  8. #undef THIS_FILE
  9. static char THIS_FILE[]=__FILE__;
  10. #define new DEBUG_NEW
  11. #endif
  12. //////////////////////////////////////////////////////////////////////
  13. // Construction/Destruction
  14. //////////////////////////////////////////////////////////////////////
  15. UINT MTServerThread(LPVOID pParam)
  16. {
  17. LogSendRecieveInfo("Start of ServerThread");
  18. WSADATA wsaData;
  19. sockaddr_in local;
  20. int wsaret = WSAStartup(0x101,&wsaData);
  21. if(wsaret!=0)
  22. {
  23. LogSendRecieveInfo("ERROR - int wsaret = WSAStartup(0x101,&wsaData);");
  24. return 0;
  25. }
  26. local.sin_family = AF_INET;
  27. local.sin_addr.s_addr = INADDR_ANY;
  28. local.sin_port = htons((u_short)20248);
  29. theApp.m_sSocket = socket(AF_INET, SOCK_STREAM, 0);
  30. if(theApp.m_sSocket == INVALID_SOCKET)
  31. {
  32. LogSendRecieveInfo("ERROR - theApp.m_sSocket = socket(AF_INET, SOCK_STREAM, 0);");
  33. return 0;
  34. }
  35. if(bind(theApp.m_sSocket,(sockaddr*)&local,sizeof(local))!=0)
  36. {
  37. LogSendRecieveInfo("ERROR - if(bind(theApp.m_sSocket,(sockaddr*)&local,sizeof(local))!=0)");
  38. return 0;
  39. }
  40. if(listen(theApp.m_sSocket,10)!=0)
  41. {
  42. LogSendRecieveInfo("ERROR - if(listen(theApp.m_sSocket,10)!=0)");
  43. return 0;
  44. }
  45. SOCKET socket;
  46. sockaddr_in from;
  47. int fromlen = sizeof(from);
  48. while(true)
  49. {
  50. if(theApp.m_bAppExiting)
  51. break;
  52. socket = accept(theApp.m_sSocket, (struct sockaddr*)&from,&fromlen);
  53. AfxBeginThread(ClientThread,(LPVOID)socket);
  54. }
  55. LogSendRecieveInfo("End of Server Thread");
  56. return 0;
  57. }
  58. BOOL Recv(SOCKET sock, SendInfo *pInfo)
  59. {
  60. long lReceiveCount = 0;
  61. long lLastRecievedCount = 0;
  62. long lExpectedCount = sizeof(SendInfo);
  63. SendInfo info;
  64. while(lReceiveCount < lExpectedCount)
  65. {
  66. lReceiveCount = recv(sock, (char*)&info, lExpectedCount-lReceiveCount, 0);
  67. if(lReceiveCount == SOCKET_ERROR)
  68. {
  69. LogSendRecieveInfo("********ERROR if(lReceiveCount == SOCKET_ERROR)*******");
  70. return FALSE;
  71. }
  72. else if(lReceiveCount == 0)
  73. return FALSE;
  74. LogSendRecieveInfo(StrF("------Bytes Read %d", lReceiveCount));
  75. memcpy(((char*)pInfo) + lLastRecievedCount, &info, lReceiveCount);
  76. lReceiveCount = lLastRecievedCount + lReceiveCount;
  77. lLastRecievedCount += lReceiveCount;
  78. }
  79. return TRUE;
  80. }
  81. UINT ClientThread(LPVOID pParam)
  82. {
  83. LogSendRecieveInfo("*********************Start of ClientThread*********************");
  84. SOCKET socket = (SOCKET)pParam;
  85. SendInfo info;
  86. int nRecvReturn = 0;
  87. CClip NewClip;
  88. CClipFormat cf;
  89. long lBytesCopied;
  90. bool bBreak = false;
  91. bool bAddToDatabase = false;
  92. BYTE *pByte = NULL;
  93. long lByteSize = 0;
  94. BOOL bSetToClipBoard = FALSE;
  95. while(true)
  96. {
  97. if(Recv(socket, &info) == FALSE)
  98. break;
  99. switch(info.m_Type)
  100. {
  101. case MyEnums::START:
  102. {
  103. NewClip.Clear();
  104. CString cs;
  105. cs.Format("%s\n(%s)(%s)", info.m_cText, info.m_cComputerName, info.m_cIP);
  106. NewClip.m_Desc = cs;
  107. bAddToDatabase = false;
  108. if(g_Opt.m_csIPListToPutOnClipboard.Find(info.m_cIP) >= 0)
  109. bSetToClipBoard = TRUE;
  110. if(g_Opt.m_csIPListToPutOnClipboard.Find(info.m_cComputerName) >= 0)
  111. bSetToClipBoard = TRUE;
  112. info.m_cText[20] = 0;
  113. LogSendRecieveInfo(StrF("::START %s %s %s", info.m_cText, info.m_cComputerName, info.m_cIP));
  114. }
  115. break;
  116. case MyEnums::DATA_START:
  117. {
  118. if(pByte != NULL)
  119. {
  120. delete pByte;
  121. pByte = NULL;
  122. }
  123. lByteSize = info.m_lParameter1;
  124. pByte = new BYTE[info.m_lParameter1];
  125. cf.m_cfType = GetFormatID(info.m_cText);
  126. lBytesCopied = 0;
  127. NewClip.m_lTotalCopySize += info.m_lParameter1;
  128. LogSendRecieveInfo(StrF("::DATA_START Total Size = %d type = %s", lByteSize, info.m_cText));
  129. }
  130. break;
  131. case MyEnums::DATA:
  132. {
  133. memcpy(((char*)pByte) + lBytesCopied, info.m_cText, info.m_lParameter1);
  134. lBytesCopied += info.m_lParameter1;
  135. LogSendRecieveInfo(StrF("::DATA Copy Bytes = %d TotalCopy = %d", info.m_lParameter1, lBytesCopied));
  136. }
  137. break;
  138. case MyEnums::DATA_END:
  139. {
  140. cf.m_hgData = NewGlobalP(pByte, lByteSize);
  141. NewClip.m_Formats.Add(cf);
  142. delete pByte;
  143. pByte = NULL;
  144. bAddToDatabase = true;
  145. LogSendRecieveInfo("::DATA_END");
  146. }
  147. break;
  148. case MyEnums::END:
  149. {
  150. if(bAddToDatabase)
  151. {
  152. LogSendRecieveInfo("::END");
  153. //::SendMessage(theApp.m_MainhWnd, WM_ADD_TO_DATABASE_FROM_SOCKET, (WPARAM)&NewClip, bSetToClipBoard);
  154. }
  155. }
  156. break;
  157. case MyEnums::EXIT:
  158. {
  159. LogSendRecieveInfo("::EXIT");
  160. bBreak = true;
  161. }
  162. break;
  163. }
  164. if(bBreak || theApp.m_bAppExiting)
  165. break;
  166. }
  167. closesocket(socket);
  168. LogSendRecieveInfo("*********************End of ClientThread*********************");
  169. return 0;
  170. }