int main(void) { int i,j; mt_struct *mts; init_dc(4172); /* This trys to find a small Mersenne Twister with period 2^521-1. */ mts = get_mt_parameter(32,521); if (mts == NULL) { printf ("error\n"); } else { sgenrand_mt(3241, mts); for (i=0; i<100; i++) { for (j=0; j<5; j++) printf("%8x ", genrand_mt(mts)); printf("\n"); } free_mt_struct(mts); } return 0; }
int ad_main_routine(int argc,const char** argv) { TAThread master_thread; TACommandVerdict verdict = taDefaultVerdict; struct sockaddr_in master_addr; const char* value; init_dc(); ta_debug_off(); value = getenv("AGENT_DAEMON_PORT"); if (value != NULL) { sscanf(value,"%d",&agent_daemon_port); } // Init master thread master_thread = ta_alloc_memory(sizeof(struct TAThread)); master_thread->communicator.data.tcp.sockid = -1; master_thread->stream = createTAOuputStream(); clear_timemark(&master_thread->start_time); clear_timemark(&master_thread->end_time); // Say to system not to create zombie processes on child death { struct sigaction act; sigaction( SIGCHLD, NULL, &act ); act.sa_flags = SA_NOCLDWAIT; sigaction( SIGCHLD, &act, NULL ); } // Create master agent socket agent_daemon_socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (agent_daemon_socket == -1) {perror("ad_main_routine"); assertion(0,"Cannot create socket"); return 1; } // Set reuse address option { int optval = 1; setsockopt(agent_daemon_socket,SOL_SOCKET,SO_REUSEADDR,&optval,sizeof(int)); } // Bind master_addr.sin_family = AF_INET; master_addr.sin_addr.s_addr = htonl(INADDR_ANY); master_addr.sin_port = htons(agent_daemon_port); if (bind(agent_daemon_socket,(struct sockaddr*) &master_addr,sizeof(master_addr)) == -1) { perror("ad_main_routine"); close(agent_daemon_socket); assertion(0,"Cannot bind socket"); return 1; } if (listen(agent_daemon_socket,10) == -1) { perror("ad_main_routine"); close(agent_daemon_socket); assertion(0,"Cannot listen socket"); return 1; } for(;;) { struct sockaddr_in addr; socklen_t length; int new_sockid; int32_t cmd_length; char* command; char* arguments; int arguments_length; int res2; // Accept new connection length = sizeof(addr); new_sockid = accept(agent_daemon_socket,(struct sockaddr *) &addr, &length); memcpy( &peer_addr, &addr, sizeof(addr) ); // Receive command res2 = recv(new_sockid,(char*)&cmd_length,sizeof(cmd_length),MSG_WAITALL); if (res2 == sizeof(cmd_length)) { cmd_length = ntohl(cmd_length); command = (char*)ta_alloc_memory(cmd_length); if (command == NULL) { assertion(0,"Not enought memory"); return 2; } if (recv(new_sockid,command,cmd_length,MSG_WAITALL) == cmd_length) { master_thread->communicator.data.tcp.sockid = new_sockid; // Parse command arguments = memchr(command,':',cmd_length); if (arguments != NULL) { *arguments = '\0'; arguments++; arguments_length = &(command[cmd_length]) - arguments; dc_printf("arguments:%s arguments_length:%d cmd_length:%d\n", arguments, arguments_length, cmd_length); } else { command[cmd_length] = '\0'; arguments_length = 0; } dc_memory_available = arguments_length; dc_rec_data = arguments; dc_socket = new_sockid; dc_parse_start(); if (strcmp(command,"exec") == 0) { dc_command_exec(); } else if (strcmp(command,"put") == 0) { dc_command_put_file(); } else if (strcmp(command,"get") == 0) { dc_command_get_file(); } else if (strcmp(command,"rm") == 0) { dc_command_rm_file(); } else if (strcmp(command,"stop_master") == 0) verdict.finish = 1; } else { perror("recv failed"); } ta_dealloc_memory(command); } // Close socket shutdown(new_sockid,2); close(new_sockid); // Break condition if (verdict.finish) break; } shutdown(agent_daemon_socket,2); close(agent_daemon_socket); finish_dc(); return 0; }
int main(void){ int i, flag; mt_struct *mts; mt_struct_stripped mt_strip; FILE *fd, *flog; if( sizeof(mt_struct) != 64 || sizeof(mt_struct_stripped) != 16 ){ printf("***BAD STRUCTURE ALIGNMENT!!!***\n"); goto brk; } if( !(flog = fopen("log.txt", "w+")) ){ printf("***FAILED TO CREATE LOG FILE!!!***n"); goto brk; } fprintf(flog, "Generating Mersenne Twisters...\n"); fflush(flog); init_dc(DCMT_SEED); for(i = 0; i < MT_RNG_COUNT; i++){ fprintf(flog, "...%i\n", i); fflush(flog); mts = get_mt_parameter_id(32, MT_RNG_PERIOD, i); if(!mts){ fprintf(flog, "***FAILED TO FIND RNG!!!***\n"); goto brk; } MT[i] = *mts; //We don't need the contents of the state, //which anyway wasn't yet initialized by sgenrand_mt() MT[i].i = 0; MT[i].state = NULL; free_mt_struct(mts); } fprintf(flog, "Inspecting configurations...\n"); fflush(flog); flag = 1; for(i = 1; i < MT_RNG_COUNT; i++) if( (MT[i].mm != MT[0].mm) || (MT[i].nn != MT[0].nn) || (MT[i].rr != MT[0].rr) || (MT[i].ww != MT[0].ww) || (MT[i].wmask != MT[0].wmask) || (MT[i].umask != MT[0].umask) || (MT[i].lmask != MT[0].lmask) || (MT[i].shift0 != MT[0].shift0) || (MT[i].shift1 != MT[0].shift1) || (MT[i].shiftB != MT[0].shiftB) || (MT[i].shiftC != MT[0].shiftC) ) flag = 0; if(!flag){ fprintf(flog, "***INCONSISTENT CONFIGURATIONS!!!***\n"); goto brk; } fprintf(flog, "Creating raw MT file...\n"); fflush(flog); if( !(fd = fopen("MersenneTwister.raw", "wb+")) ){ fprintf(flog, "***FAILED TO CREATE RAW MT FILE!!!***\n"); goto brk; } fwrite(&MT, sizeof(mt_struct), MT_RNG_COUNT, fd); fclose(fd); fprintf(flog, "Creating stripped MT file...\n"); fflush(flog); if( !(fd = fopen("MersenneTwister.dat", "wb+")) ){ fprintf(flog, "***FAILED TO CREATE STRIPPED FILE!!!***\n"); goto brk; } for(i = 0; i < MT_RNG_COUNT; i++){ mt_strip.matrix_a = MT[i].aaa; mt_strip.mask_b = MT[i].maskB; mt_strip.mask_c = MT[i].maskC; mt_strip.seed = 0; fwrite(&mt_strip, sizeof(mt_struct_stripped), 1, fd); } fclose(fd); fprintf(flog, "Creating MT header file...\n"); fflush(flog); if( !(fd = fopen("MersenneTwister.h", "w+")) ){ fprintf(flog, "***FAILED TO CREATE MersenneTwister.h!!!***\n"); goto brk; } fprintf(fd, "#ifndef MERSENNETWISTER_H\n" ); fprintf(fd, "#define MERSENNETWISTER_H\n" ); fprintf(fd, "#ifndef mersennetwister_h\n" ); fprintf(fd, "#define mersennetwister_h\n" ); fprintf(fd, "\n\n\n"); fprintf(fd, "#define DCMT_SEED %i\n", DCMT_SEED ); fprintf(fd, "#define MT_RNG_PERIOD %i\n", MT_RNG_PERIOD ); fprintf(fd, "\n\n"); fprintf(fd, "typedef struct{\n" ); fprintf(fd, " unsigned int matrix_a;\n" ); fprintf(fd, " unsigned int mask_b;\n" ); fprintf(fd, " unsigned int mask_c;\n" ); fprintf(fd, " unsigned int seed;\n" ); fprintf(fd, "} mt_struct_stripped;\n" ); fprintf(fd, "\n\n"); fprintf(fd, "#define MT_RNG_COUNT %i\n", MT_RNG_COUNT ); fprintf(fd, "#define MT_MM %i\n", MT[0].mm ); fprintf(fd, "#define MT_NN %i\n", MT[0].nn ); fprintf(fd, "#define MT_WMASK 0x%XU\n", 0xFFFFFFFFU ); fprintf(fd, "#define MT_UMASK 0x%XU\n", MT[0].umask ); fprintf(fd, "#define MT_LMASK 0x%XU\n", MT[0].lmask ); fprintf(fd, "#define MT_SHIFT0 %i\n", MT[0].shift0 ); fprintf(fd, "#define MT_SHIFTB %i\n", MT[0].shiftB ); fprintf(fd, "#define MT_SHIFTC %i\n", MT[0].shiftC ); fprintf(fd, "#define MT_SHIFT1 %i\n", MT[0].shift1 ); fprintf(fd, "\n\n\n"); fprintf(fd, "#endif\n"); fprintf(fd, "#endif\n"); fclose(fd); fprintf(flog, "All done.\n"); brk: fclose(flog); return 0; }