void masterconn_replicate(masterconn *eptr,const uint8_t *data,uint32_t length) { uint64_t chunkid; uint32_t version; uint32_t ip; uint16_t port; uint32_t xormasks[4]; uint8_t *ptr; void *packet; if (!(length==18 || (length>=28+18 && length<=28+8*18 && (length-28)%18==0))) { syslog(LOG_NOTICE,"MATOCS_REPLICATE - wrong size (%"PRIu32"/18|12+n*18[n:1..100]|28+n*18[n:1..8])",length); eptr->mode = KILL; return; } chunkid = get64bit(&data); version = get32bit(&data); packet = masterconn_create_detached_packet(eptr,CSTOMA_REPLICATE,8+4+1); ptr = masterconn_get_packet_data(packet); put64bit(&ptr,chunkid); put32bit(&ptr,version); if (length==8+4+4+2) { ip = get32bit(&data); port = get16bit(&data); // syslog(LOG_NOTICE,"start job replication (%08"PRIX64":%04"PRIX32":%04"PRIX32":%02"PRIX16")",chunkid,version,ip,port); job_replicate_simple(masterconn_replicationfinished,packet,chunkid,version,ip,port); } else { xormasks[0] = get32bit(&data); xormasks[1] = get32bit(&data); xormasks[2] = get32bit(&data); xormasks[3] = get32bit(&data); job_replicate_raid(masterconn_replicationfinished,packet,chunkid,version,(length-28)/18,xormasks,data); } }
void masterconn_replicate(masterconn *eptr,const uint8_t *data,uint32_t length) { uint64_t chunkid; uint32_t version; uint32_t ip; uint16_t port; uint8_t *ptr; void *packet; if (length!=8+4+4+2 && (length<12+18 || length>12+18*100 || (length-12)%18!=0)) { syslog(LOG_NOTICE,"MATOCS_REPLICATE - wrong size (%"PRIu32"/18|12+n*18[n:1..100])",length); eptr->mode = KILL; return; } chunkid = get64bit(&data); version = get32bit(&data); packet = masterconn_create_detached_packet(CSTOMA_REPLICATE,8+4+1); if (packet==NULL) { eptr->mode=KILL; return; } ptr = masterconn_get_packet_data(packet); put64bit(&ptr,chunkid); put32bit(&ptr,version); if (length==8+4+4+2) { ip = get32bit(&data); port = get16bit(&data); // syslog(LOG_NOTICE,"start job replication (%08"PRIX64":%04"PRIX32":%04"PRIX32":%02"PRIX16")",chunkid,version,ip,port); job_replicate_simple(eptr->jpool,masterconn_replicationfinished,packet,chunkid,version,ip,port); } else { job_replicate(eptr->jpool,masterconn_replicationfinished,packet,chunkid,version,(length-12)/18,data); } }