Changeset 1173
- Timestamp:
- 03/24/07 23:31:06 (1 year ago)
- Files:
-
- nepenthes/trunk/modules/submit-mwserv/TransferSession.cpp (modified) (12 diffs)
- nepenthes/trunk/modules/submit-mwserv/TransferSession.hpp (modified) (4 diffs)
- nepenthes/trunk/modules/submit-mwserv/submit-mwserv.cpp (modified) (7 diffs)
- nepenthes/trunk/modules/submit-mwserv/submit-mwserv.hpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
nepenthes/trunk/modules/submit-mwserv/TransferSession.cpp
r1169 r1173 108 108 } 109 109 110 void TransferSession::transfer Sample(TransferSample& sample, string url)110 void TransferSession::transfer(TransferSample& sample, string url) 111 111 { 112 112 m_sample = sample; … … 123 123 124 124 initializeHandle(); 125 126 125 } 127 126 … … 135 134 m_postInfo = m_postInfoLast = 0; 136 135 137 if(m_type != TSS_HEARTBEAT) 138 { 139 curl_formadd(&m_postInfo, &m_postInfoLast, CURLFORM_PTRNAME, "guid", 136 curl_formadd(&m_postInfo, &m_postInfoLast, CURLFORM_PTRNAME, "guid", 140 137 CURLFORM_COPYCONTENTS, m_sample.guid.c_str(), CURLFORM_END); 141 curl_formadd(&m_postInfo, &m_postInfoLast, CURLFORM_PTRNAME, 142 "maintainer", CURLFORM_COPYCONTENTS, m_sample.maintainer.c_str(), 143 CURLFORM_END); 144 curl_formadd(&m_postInfo, &m_postInfoLast, CURLFORM_PTRNAME, "secret", 145 CURLFORM_COPYCONTENTS, m_sample.secret.c_str(), CURLFORM_END); 138 curl_formadd(&m_postInfo, &m_postInfoLast, CURLFORM_PTRNAME, 139 "maintainer", CURLFORM_COPYCONTENTS, m_sample.maintainer.c_str(), 140 CURLFORM_END); 141 curl_formadd(&m_postInfo, &m_postInfoLast, CURLFORM_PTRNAME, "secret", 142 CURLFORM_COPYCONTENTS, m_sample.secret.c_str(), CURLFORM_END); 143 144 if(m_type != TST_HEARTBEAT) 145 { 146 146 curl_formadd(&m_postInfo, &m_postInfoLast, CURLFORM_PTRNAME, "url", 147 147 CURLFORM_COPYCONTENTS, m_sample.url.c_str(), CURLFORM_END); … … 153 153 CURLFORM_COPYCONTENTS, m_sample.daddr.c_str(), CURLFORM_END); 154 154 155 if(m_type == TS S_SAMPLE)155 if(m_type == TST_SAMPLE) 156 156 { 157 157 curl_formadd(&m_postInfo, &m_postInfoLast, CURLFORM_PTRNAME, "data", … … 159 159 m_sample.binarySize, CURLFORM_END); 160 160 } 161 162 curl_easy_setopt(m_curlHandle, CURLOPT_HTTPPOST, m_postInfo);163 curl_easy_setopt(m_curlHandle, CURLOPT_SSL_VERIFYHOST, false);164 curl_easy_setopt(m_curlHandle, CURLOPT_SSL_VERIFYPEER, false);165 curl_easy_setopt(m_curlHandle, CURLOPT_URL, m_targetUrl.c_str());166 curl_easy_setopt(m_curlHandle, CURLOPT_USERAGENT,167 "nepenthes " VERSION " (" MY_OS ", " MY_ARCH ", " MY_COMPILER ")");168 curl_easy_setopt(m_curlHandle, CURLOPT_WRITEDATA, this);169 curl_easy_setopt(m_curlHandle, CURLOPT_WRITEFUNCTION,170 TransferSession::readData);171 161 } 172 162 else … … 176 166 ", " MY_COMPILER ")", CURLFORM_END); 177 167 } 168 169 curl_easy_setopt(m_curlHandle, CURLOPT_HTTPPOST, m_postInfo); 170 curl_easy_setopt(m_curlHandle, CURLOPT_SSL_VERIFYHOST, false); 171 curl_easy_setopt(m_curlHandle, CURLOPT_SSL_VERIFYPEER, false); 172 curl_easy_setopt(m_curlHandle, CURLOPT_URL, m_targetUrl.c_str()); 173 curl_easy_setopt(m_curlHandle, CURLOPT_USERAGENT, 174 "nepenthes " VERSION " (" MY_OS ", " MY_ARCH ", " MY_COMPILER ")"); 175 curl_easy_setopt(m_curlHandle, CURLOPT_WRITEDATA, this); 176 curl_easy_setopt(m_curlHandle, CURLOPT_WRITEFUNCTION, 177 TransferSession::readData); 178 178 179 179 CURLMcode error; … … 197 197 TransferSession::Status TransferSession::getTransferStatus() 198 198 { 199 if(m_buffer == "OK") 200 return TSS_OK; 201 else if(m_buffer == "UNKNOWN") 202 return TSS_UNKNOWN; 199 if(m_type != TST_HEARTBEAT) 200 { 201 if(m_buffer == "OK") 202 return TSS_OK; 203 else if(m_buffer == "UNKNOWN") 204 return TSS_UNKNOWN; 205 else 206 return TSS_ERROR; 207 } 203 208 else 204 return TSS_ERROR; 209 { 210 if(m_buffer.substr(0, 4) == "OK: ") 211 return TSS_HEARTBEAT; 212 else 213 return TSS_ERROR; 214 } 205 215 } 206 216 … … 232 242 &maxFd))) 233 243 { 234 printf("Obtaining write socket failed: %s\n",244 logCrit("Obtaining write socket failed: %s\n", 235 245 curl_multi_strerror(error)); 236 246 return false; … … 256 266 while((message = curl_multi_info_read(m_multiHandle, &queued))) 257 267 { 258 if(message->msg == CURLMSG_DONE != CURLE_OK)268 if(message->msg == CURLMSG_DONE) 259 269 { 260 270 if(message->data.result) … … 283 293 m_sample.binary = 0; 284 294 285 return 0; 295 break; 296 297 case TransferSession::TSS_HEARTBEAT: 298 { 299 unsigned long delta = strtoul(m_buffer.substr(4). 300 c_str(), 0, 0); 301 logInfo("Next heartbeat in %u seconds.\n", delta); 302 303 m_parent->scheduleHeartbeat(delta); 304 305 return 0; 306 } 286 307 287 308 case TransferSession::TSS_ERROR: 309 if(m_type == TST_HEARTBEAT) 310 m_parent->scheduleHeartbeat(DEFAULT_HEARTBEAT_DELTA); 311 288 312 logCrit("%s reported \"%s\"\n", m_targetUrl.c_str(), 289 313 m_buffer.c_str()); … … 311 335 &maxFd))) 312 336 { 313 printf("Obtaining read socket failed: %s\n",337 logCrit("Obtaining read socket failed: %s\n", 314 338 curl_multi_strerror(error)); 315 339 return -1; … … 322 346 !FD_ISSET(maxFd, &errorSet)) 323 347 { 324 printf("maxFd not in set: %i!\n", maxFd);348 logCrit("maxFd not in set: %i!\n", maxFd); 325 349 return -1; 326 350 } nepenthes/trunk/modules/submit-mwserv/TransferSession.hpp
r1169 r1173 68 68 enum Type 69 69 { 70 TS S_INSTANCE,71 TS S_SAMPLE,72 TS S_HEARTBEAT,70 TST_INSTANCE, 71 TST_SAMPLE, 72 TST_HEARTBEAT, 73 73 }; 74 74 … … 80 80 TSS_OK, 81 81 TSS_UNKNOWN, 82 TSS_HEARTBEAT, 82 83 TSS_ERROR, 83 84 }; … … 85 86 TransferSession::Status getTransferStatus(); 86 87 87 void transfer Sample(TransferSample& sample, string url);88 void transfer(TransferSample& sample, string url); 88 89 89 90 // POLLSocket … … 117 118 Type m_type; 118 119 SubmitMwservModule * m_parent; 120 121 unsigned long m_heartbeatDelta; 119 122 120 123 private: nepenthes/trunk/modules/submit-mwserv/submit-mwserv.cpp
r1169 r1173 50 50 51 51 #define SUBMIT_URI "nepenthes/submit" 52 #define HEARTBEAT_URI " nepenthes/heartbeat"52 #define HEARTBEAT_URI "heartbeat" 53 53 54 54 … … 65 65 m_SubmitterName = "submit-mwserv"; 66 66 m_SubmitterDescription = "mwserv.py HTTP Post Submission"; 67 68 m_Timeout = time(0);69 m_Events.reset();70 67 } 71 68 … … 101 98 } 102 99 100 if(* m_url.rbegin() != '/') 101 m_url += "/"; 102 103 103 REG_SUBMIT_HANDLER(this); 104 104 REG_EVENT_HANDLER(this); 105 105 106 handleEvent(0); 107 106 108 return true; 107 109 } … … 121 123 TransferSample sample; 122 124 TransferSession * session = new TransferSession(TransferSession:: 123 TS S_INSTANCE, this);125 TST_INSTANCE, this); 124 126 125 127 { … … 145 147 } 146 148 147 session->transfer Sample(sample, m_url + SUBMIT_URI);149 session->transfer(sample, m_url + SUBMIT_URI); 148 150 g_Nepenthes->getSocketMgr()->addPOLLSocket(session); 149 151 } … … 156 158 { 157 159 TransferSession * session = new TransferSession(TransferSession:: 158 TS S_SAMPLE, this);159 160 session->transfer Sample(sample, m_url + SUBMIT_URI);160 TST_SAMPLE, this); 161 162 session->transfer(sample, m_url + SUBMIT_URI); 161 163 g_Nepenthes->getSocketMgr()->addPOLLSocket(session); 162 164 } … … 164 166 uint32_t SubmitMwservModule::handleEvent(Event * ev) 165 167 { 168 m_Events.reset(EV_TIMEOUT); 169 170 TransferSample sample; 171 TransferSession * session = new TransferSession(TransferSession:: 172 TST_HEARTBEAT, this); 173 174 sample.guid = m_guid; 175 sample.maintainer = m_maintainer; 176 sample.secret = m_secret; 177 sample.binary = 0; 178 179 session->transfer(sample, m_url + HEARTBEAT_URI); 180 g_Nepenthes->getSocketMgr()->addPOLLSocket(session); 181 166 182 return 0; 183 } 184 185 void SubmitMwservModule::scheduleHeartbeat(unsigned long delta) 186 { 187 if(delta > MAX_HEARTBEAT_DELTA) 188 { 189 logInfo("Capping server heartbeat delta of %u sec to %u sec.\n", delta, 190 MAX_HEARTBEAT_DELTA); 191 192 delta = MAX_HEARTBEAT_DELTA; 193 } 194 195 m_Events.set(EV_TIMEOUT); 196 m_Timeout = time(0) + delta; 167 197 } 168 198 nepenthes/trunk/modules/submit-mwserv/submit-mwserv.hpp
r1169 r1173 40 40 41 41 42 #define DEFAULT_HEARTBEAT_DELTA 30 43 #define MAX_HEARTBEAT_DELTA 300 44 45 42 46 using namespace std; 43 47 … … 62 66 void submitSample(TransferSample& sample); 63 67 void retrySample(TransferSample& sample); 68 void scheduleHeartbeat(unsigned long delta); 64 69 65 70 protected:
