Changeset 8021
- Timestamp:
- 12/31/12 01:39:51 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/module-camd35.c
r7933 r8021 66 66 if (status == -1) cs_disconnect_client(cl); 67 67 } 68 } 69 if (status != -1){ 70 if(cl->reader){ 71 cl->reader->last_s = time((time_t *) 0); 72 } 73 cl->last = time((time_t *) 0); 68 74 } 69 75 return status; … … 163 169 "received %d bytes from %s (native)", rs, remote_txt()); 164 170 } 165 client->last=time((time_t *) 0); 166 171 if(rc>=0) client->last = time((time_t *) 0); // last client action is now 167 172 switch(rc) { 168 173 //case 0: break; … … 388 393 static int32_t tcp_connect(struct s_client *cl) 389 394 { 390 if (cl->is_udp) { 391 if (!IP_ISSET(SIN_GET_ADDR(cl->udp_sa)) || cl->reader->last_s-cl->reader->last_g > cl->reader->tcp_rto) 392 if (!hostResolve(cl->reader)) return 0; 393 } 394 395 if (!cl->reader->tcp_connected) { 395 if (cl->is_udp) { // check for udp client 396 if (!IP_ISSET(SIN_GET_ADDR(cl->udp_sa)) || cl->reader->last_s-cl->reader->last_g > cl->reader->tcp_rto) // check ip or if client reached timeout 397 if (!hostResolve(cl->reader)) return 0; // could not resolve client 398 } 399 400 if (!cl->reader->tcp_connected) { // client not connected 396 401 int32_t handle=0; 397 handle = network_tcp_connection_open(cl->reader); 398 if (handle<0) { 402 handle = network_tcp_connection_open(cl->reader); // try to connect 403 if (handle<0) { // got no handle -> error! 404 cl->reader->last_s = 0; // set last send to zero 405 cl->reader->last_g = 0; // set last receive to zero 406 cl->last = 0; // set last client action to zero 399 407 return(0); 400 408 } … … 402 410 cl->reader->tcp_connected = 1; 403 411 cl->reader->card_status = CARD_INSERTED; 404 cl->reader->last_s = cl->reader->last_g = time((time_t *)0); 412 cl->reader->last_s = time(NULL); // reset last send 413 cl->reader->last_g = time(NULL); // reset last receive 414 cl->last = time(NULL); // reset last client action 405 415 cl->pfd = cl->udp_fd = handle; 406 416 } 407 if (!cl->udp_fd) return(0); 408 409 if (cl->reader->last_s-cl->reader->last_g > cl->reader->tcp_rto) { 417 if (!cl->udp_fd) return(0); // Check if client has no handle -> error 418 if (cl->reader->last_s-cl->reader->last_g > cl->reader->tcp_rto) { // check if client reached timeout, if so disconnect client 419 //cs_log("last_s:%d, last_g:%d, tcp_rto:%d, diff:%d",(int)cl->reader->last_s,(int)cl->reader->last_g,(int)cl->reader->tcp_rto, 420 // (int)(cl->reader->last_s - cl->reader->last_g)); 410 421 network_tcp_connection_close(cl->reader, "rto"); 411 422 return 0; 412 423 } 413 424 414 return(1); 425 return(1); // all ok 415 426 } 416 427 … … 452 463 cs_debug_mask(D_CACHEEX, "cacheex: sending own id %" PRIu64 "X request %s", cacheex_node_id(camd35_node_id), username(cl)); 453 464 camd35_send(cl, rbuf, 12); //send adds +20 454 455 time_t now = time((time_t*)0);456 if (cl->reader)457 cl->reader->last_s = now;458 cl->last = now;459 465 } 460 466 … … 472 478 cs_debug_mask(D_CACHEEX, "cacheex: sending id request to %s", username(cl)); 473 479 camd35_send(cl, rbuf, 12); //send adds +20 474 475 time_t now = time((time_t*)0);476 if (cl->reader)477 cl->reader->last_s = now;478 cl->last = now;479 480 } 480 481 … … 487 488 cl->ncd_skey[8] = 1; 488 489 cs_debug_mask(D_CACHEEX, "cacheex: received id answer from %s: %" PRIu64 "X", username(cl), cacheex_node_id(cl->ncd_skey)); 489 490 time_t now = time((time_t*)0);491 if (cl->reader)492 cl->reader->last_g = now;493 cl->last = now;494 490 } 495 491 … … 497 493 int32_t camd35_cache_push_chk(struct s_client *cl, ECM_REQUEST *er) 498 494 { 499 //check max 10 nodes to push: 500 if (ll_count(er->csp_lastnodes) >= cacheex_maxhop(cl)) { 495 uint8_t oldnode = 0; // used to indicate a previous remote node id was present 496 497 if (ll_count(er->csp_lastnodes) >= cacheex_maxhop(cl)) { //check max 10 nodes to push: 501 498 cs_debug_mask(D_CACHEEX, "cacheex: nodelist reached %d nodes, no push", cacheex_maxhop(cl)); 502 499 return 0; 503 500 } 504 501 505 502 if (cl->reader) { 506 tcp_connect(cl); 507 } 508 if (!cl->udp_fd || !cl->crypted) { 509 cs_debug_mask(D_CACHEEX, "cacheex: not connected %s -> no push", username(cl)); 510 return 0; 511 } 512 513 //Update remote id every 256 pushs: 503 if(!tcp_connect(cl)){ 504 cs_debug_mask(D_CACHEEX, "cacheex: not connected %s -> no push", username(cl)); 505 return 0; 506 } 507 } 514 508 //cs_debug_mask(D_CACHEEX, "ncd[8]=%d [9]=%d [10]=%d [11]=%d", cl->ncd_skey[8], cl->ncd_skey[9], cl->ncd_skey[10], cl->ncd_skey[11]); 515 if (!(++cl->ncd_skey[11])) { 516 camd35_cache_push_request_remote_id(cl); 517 } 518 509 510 if(cl->reader){ // check for reader connection (if not exists then in servermode!) 511 if(cl->reader->last_s-cl->reader->last_g > cl->reader->tcp_rto-20) // Cache-ex as clientpusher renew remote nodeid before rto kicks in 512 cl->ncd_skey[9] = 0; //reset requestmemory -> inits a remote node id request 513 } 514 else 515 if (cl->ncd_skey[8]==0 || !(++cl->ncd_skey[11])) // tcp: renew remote id every 256 pushes or if no remote nodeid present: 516 cl->ncd_skey[9] = 0; //reset requestmemory -> inits a remote node id request 517 519 518 //Update remote id: 520 if (!cl->ncd_skey[ 8] && !cl->ncd_skey[9]) {519 if (!cl->ncd_skey[9]) { 521 520 cl->ncd_skey[9] = 1; //remember request 522 521 camd35_cache_push_request_remote_id(cl); 523 } 524 if (!cl->ncd_skey[8]) { // We have no remote node, so push out 522 oldnode = cl->ncd_skey[8]; // if we have a previous node store it 523 cl->ncd_skey[8]=0; // reset nodeid 524 } 525 if (!oldnode && !cl->ncd_skey[8]) { // We have no remote node -> no push 525 526 cs_debug_mask(D_CACHEEX, "cacheex: push without remote node %s - ignored", username(cl)); 527 cl->ncd_skey[9] = 0; //reset requestmemory -> inits a remote node id request 526 528 return 0; 527 529 } … … 559 561 //E_UNHANDLED : incoming ECM request 560 562 561 time_t now = time((time_t*)0);562 563 if (cl->reader) { 563 tcp_connect(cl); 564 if (!cl->crypted) { 565 camd35_client_init(cl); 566 tcp_connect(cl); 567 } 568 cl->reader->last_s = now; 569 } 570 if (!cl->udp_fd || !cl->crypted) { 571 cs_debug_mask(D_CACHEEX, "not pushed, %s not %s", username(cl), cl->udp_fd?"authenticated":"connected"); 572 return(-1); 573 } 574 cl->last = now; 564 if(!tcp_connect(cl)){ 565 cs_debug_mask(D_CACHEEX, "cacheex: not connected %s -> no push", username(cl)); 566 return (-1); 567 } 568 } 575 569 576 570 uint32_t size = sizeof(er->ecmd5)+sizeof(er->csp_hash)+sizeof(er->cw)+sizeof(uint8_t) + … … 632 626 if (rc != E_FOUND && rc != E_UNHANDLED) //Maybe later we could support other rcs 633 627 return; 634 635 time_t now = time((time_t*)0);636 if (cl->reader)637 cl->reader->last_g = now;638 cl->last = now;639 628 640 629 ECM_REQUEST *er; … … 735 724 static void * camd35_server(struct s_client *client __attribute__((unused)), uchar *mbuf, int32_t n) 736 725 { 726 if (client->reader){ 727 client->reader->last_g = time((time_t *) 0); // last receive is now 728 cs_log("CAMD35_SERVER last = %d, last_s = %d, last_g = %d", (int) client->last, (int) client->reader->last_s, (int) client->reader->last_g); 729 } 730 client->last= time((time_t *) 0); // last client action is now 731 737 732 switch(mbuf[0]) { 738 733 case 0: // ECM … … 859 854 static int32_t camd35_recv_chk(struct s_client *client, uchar *dcw, int32_t *rc, uchar *buf, int32_t rc2 __attribute__((unused))) 860 855 { 856 if (client->reader){ 857 client->reader->last_g = time((time_t *) 0); // last receive is now 858 } 859 861 860 uint16_t idx; 862 861 static const char *typtext[]={"ok", "invalid", "sleeping"};
Note:
See TracChangeset
for help on using the changeset viewer.