Example #1
0
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;
}
Example #2
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;
}