bool CManualTransfer::UpdateServer() { if (!XRCCTRL(*this, "ID_SERVER_CUSTOM", wxRadioButton)->GetValue()) return true; if (!VerifyServer()) return false; CServer server; unsigned long port; XRCCTRL(*this, "ID_PORT", wxTextCtrl)->GetValue().ToULong(&port); wxString host = XRCCTRL(*this, "ID_HOST", wxTextCtrl)->GetValue(); // SetHost does not accept URL syntax if (host[0] == '[') { host.RemoveLast(); host = host.Mid(1); } server.SetHost(host, port); const wxString& protocolName = XRCCTRL(*this, "ID_PROTOCOL", wxChoice)->GetStringSelection(); const enum ServerProtocol protocol = CServer::GetProtocolFromName(protocolName); if (protocol != UNKNOWN) server.SetProtocol(protocol); else server.SetProtocol(FTP); enum LogonType logon_type = CServer::GetLogonTypeFromName(XRCCTRL(*this, "ID_LOGONTYPE", wxChoice)->GetStringSelection()); server.SetLogonType(logon_type); server.SetUser(XRCCTRL(*this, "ID_USER", wxTextCtrl)->GetValue(), XRCCTRL(*this, "ID_PASS", wxTextCtrl)->GetValue()); server.SetAccount(XRCCTRL(*this, "ID_ACCOUNT", wxTextCtrl)->GetValue()); delete m_pServer; m_pServer = new CServer(server); return true; }
bool OutboundRTMPProtocol::PerformHandshakeStage2(IOBuffer &inputBuffer, bool encrypted) { if (encrypted || _pProtocolHandler->ValidateHandshake()) { if (!VerifyServer(inputBuffer)) { FATAL("Unable to verify server"); return false; } } uint8_t *pInputBuffer = GETIBPOINTER(inputBuffer) + 1; uint32_t serverDHOffset = GetDHOffset(pInputBuffer, _usedScheme); if (_pDHWrapper == NULL) { FATAL("dh wrapper not initialized"); return false; } DEBUG_HANDSHAKE("CLIENT: 1. serverDHOffset: %" PRIu32 "; _usedScheme: %" PRIu8 "; serverPublicKey: %s", serverDHOffset, _usedScheme, STR(hex(pInputBuffer + serverDHOffset, 128))); if (!_pDHWrapper->CreateSharedKey(pInputBuffer + serverDHOffset, 128)) { FATAL("Unable to create shared key"); return false; } uint8_t secretKey[128]; if (!_pDHWrapper->CopySharedKey(secretKey, sizeof (secretKey))) { FATAL("Unable to compute shared"); return false; } DEBUG_HANDSHAKE("CLIENT: 2. secretKey: %s", STR(hex(secretKey, 128))); if (encrypted) { _pKeyIn = new RC4_KEY; _pKeyOut = new RC4_KEY; InitRC4Encryption( secretKey, (uint8_t*) & pInputBuffer[serverDHOffset], _pClientPublicKey, _pKeyIn, _pKeyOut); uint8_t data[1536]; RC4(_pKeyIn, 1536, data, data); RC4(_pKeyOut, 1536, data, data); } delete _pDHWrapper; _pDHWrapper = NULL; uint32_t serverDigestOffset = GetDigestOffset(pInputBuffer, _usedScheme); DEBUG_HANDSHAKE("CLIENT: 3. serverDigestOffset: %" PRIu32 "; _usedScheme: %" PRIu8, serverDigestOffset, _usedScheme); if (_pOutputBuffer == NULL) { _pOutputBuffer = new uint8_t[1536]; } else { delete[] _pOutputBuffer; _pOutputBuffer = new uint8_t[1536]; } for (uint32_t i = 0; i < 1536; i++) { _pOutputBuffer[i] = rand() % 256; } uint8_t * pChallangeKey = new uint8_t[512]; HMACsha256(pInputBuffer + serverDigestOffset, 32, genuineFPKey, 62, pChallangeKey); uint8_t * pDigest = new uint8_t[512]; HMACsha256(_pOutputBuffer, 1536 - 32, pChallangeKey, 32, pDigest); memcpy(_pOutputBuffer + 1536 - 32, pDigest, 32); DEBUG_HANDSHAKE("CLIENT: 4. clientChallange: %s", STR(hex(pDigest, 32))); delete[] pChallangeKey; delete[] pDigest; _outputBuffer.ReadFromBuffer(_pOutputBuffer, 1536); delete[] _pOutputBuffer; _pOutputBuffer = NULL; _rtmpState = RTMP_STATE_DONE; return true; }
static int cgimain( struct Weixin4cEnv *penv ) { char *signature = NULL ; char *timestamp = NULL ; char *nonce = NULL ; char *echostr = NULL ; char *post_data = NULL ; int post_data_len ; xml req ; int nret = 0 ; PUBSendContentTypeHtml(); PUBDupUrlParam( "signature" , & signature ); PUBDupUrlParam( "timestamp" , & timestamp ); PUBDupUrlParam( "nonce" , & nonce ); PUBDupUrlParam( "echostr" , & echostr ); if( signature && timestamp && nonce && echostr ) { SetLogFile( "%s/log/%s_VerifyServer.log" , penv->pconf->home , penv->pconf->project_name ); nret = VerifyServer( penv , signature , timestamp , nonce , echostr ) ; SetLogFile( "%s/log/%s_weixin4c.log" , penv->pconf->home , penv->pconf->project_name ); if( nret ) { ErrorLog( __FILE__ , __LINE__ , "VerifyServer failed[%d]" , nret ); } else { InfoLog( __FILE__ , __LINE__ , "VerifyServer ok" ); } } else { nret = PUBReadPostBuffer() ; if( nret ) { ErrorLog( __FILE__ , __LINE__ , "PUBReadPostBuffer failed[%d]" , nret ); } else { InfoLog( __FILE__ , __LINE__ , "PUBReadPostBuffer ok" ); post_data = PUBGetPostBufferPtr() ; post_data_len = PUBGetPostBufferLength() ; memset( & req , 0x00 , sizeof(xml) ); nret = DSCDESERIALIZE_XML_xml( NULL , post_data , & post_data_len , & req ) ; if( nret ) { ErrorLog( __FILE__ , __LINE__ , "DSCDESERIALIZE_XML_xml_MsgType failed[%d] , xml[%s]" , nret , post_data ); } else { InfoLog( __FILE__ , __LINE__ , "DSCDESERIALIZE_XML_xml_MsgType ok , xml[%s]" , post_data ); InfoLog( __FILE__ , __LINE__ , "req.MsgType[%s]" , req.MsgType ); if( strcmp( req.MsgType , "<![CDATA[event]]>" ) == 0 ) { nret = ReceiveEvent( penv , post_data , post_data_len , & req ) ; if( nret ) { ErrorLog( __FILE__ , __LINE__ , "ReceiveEvent failed[%d]" , nret ); } else { InfoLog( __FILE__ , __LINE__ , "ReceiveEvent ok" ); } } else if( strcmp( req.MsgType , "<![CDATA[text]]>" ) == 0 ) { nret = ReceiveText( penv , post_data , post_data_len , & req ) ; if( nret ) { ErrorLog( __FILE__ , __LINE__ , "ReceiveText failed[%d]" , nret ); } else { InfoLog( __FILE__ , __LINE__ , "ReceiveText ok" ); } } else if( strcmp( req.MsgType , "<![CDATA[image]]>" ) == 0 ) { nret = ReceiveImage( penv , post_data , post_data_len , & req ) ; if( nret ) { ErrorLog( __FILE__ , __LINE__ , "ReceiveImage failed[%d]" , nret ); } else { InfoLog( __FILE__ , __LINE__ , "ReceiveImage ok" ); } } else if( strcmp( req.MsgType , "<![CDATA[voice]]>" ) == 0 ) { nret = ReceiveVoice( penv , post_data , post_data_len , & req ) ; if( nret ) { ErrorLog( __FILE__ , __LINE__ , "ReceiveVoice failed[%d]" , nret ); } else { InfoLog( __FILE__ , __LINE__ , "ReceiveVoice ok" ); } } else if( strcmp( req.MsgType , "<![CDATA[video]]>" ) == 0 ) { nret = ReceiveVideo( penv , post_data , post_data_len , & req ) ; if( nret ) { ErrorLog( __FILE__ , __LINE__ , "ReceiveVideo failed[%d]" , nret ); } else { InfoLog( __FILE__ , __LINE__ , "ReceiveVideo ok" ); } } else if( strcmp( req.MsgType , "<![CDATA[shortvideo]]>" ) == 0 ) { nret = ReceiveShortVideo( penv , post_data , post_data_len , & req ) ; if( nret ) { ErrorLog( __FILE__ , __LINE__ , "ReceiveShortVideo failed[%d]" , nret ); } else { InfoLog( __FILE__ , __LINE__ , "ReceiveShortVideo ok" ); } } else if( strcmp( req.MsgType , "<![CDATA[location]]>" ) == 0 ) { nret = ReceiveLocation( penv , post_data , post_data_len , & req ) ; if( nret ) { ErrorLog( __FILE__ , __LINE__ , "ReceiveLocation failed[%d]" , nret ); } else { InfoLog( __FILE__ , __LINE__ , "ReceiveLocation ok" ); } } else if( strcmp( req.MsgType , "<![CDATA[link]]>" ) == 0 ) { nret = ReceiveLink( penv , post_data , post_data_len , & req ) ; if( nret ) { ErrorLog( __FILE__ , __LINE__ , "ReceiveLink failed[%d]" , nret ); } else { InfoLog( __FILE__ , __LINE__ , "ReceiveLink ok" ); } } else { ErrorLog( __FILE__ , __LINE__ , "xml.MsgType[%s] invalid" , req.MsgType ); } } } } if( signature ) free( signature ); if( timestamp ) free( timestamp ); if( nonce ) free( nonce ); if( echostr ) free( echostr ); return nret; }