diff --git a/src/server/distrend.c b/src/server/distrend.c --- a/src/server/distrend.c +++ b/src/server/distrend.c @@ -81,7 +81,7 @@ struct general_info /* ************General Functions************* */ int distrend_do(); -int distrend_do_config(int argc, char *argv[], struct distrend_config **config); +int distrend_do_config(int argc, char *argv[], struct distrend_config **config, multiio_context_t multiio); int distrend_config_free(struct distrend_config *config); int distrend_handle_request(struct distrend_listens *listens, struct distrend_client *client, struct distren_request *req, void *reqdata, struct general_info *geninfo); @@ -97,7 +97,7 @@ int import_general_info(struct general_i int update_xml_joblist(struct general_info *geninfo); /* **************Test Functions**************** */ -int interactiveTest(int test, struct general_info *general_info); +int interactiveTest(int test, multiio_context_t multiio, struct general_info *general_info); /* **************** Main ********************* */ int main(int argc, char *argv[]) @@ -107,6 +107,7 @@ int main(int argc, char *argv[]) int test = 0; /*< Interactive mode if 1 */ int tmp; struct general_info general_info; + multiio_context_t multiio; enum clientstatus { @@ -134,7 +135,9 @@ int main(int argc, char *argv[]) } - if(distrend_do_config(argc, argv, &general_info.config)) + multiio = multiio_context_new(); + + if(distrend_do_config(argc, argv, &general_info.config, multiio)) return 1; /** preset paths */ @@ -151,20 +154,21 @@ int main(int argc, char *argv[]) { fprintf(stderr, "%s:%d: mysqlConnect() failed\n", __FILE__, __LINE__); fprintf(stderr, "don't test mysql stuff\n"); - interactiveTest(test, &general_info); + interactiveTest(test, multiio, &general_info); return 1; } fprintf(stderr,"Finished connecting!\n"); /** Execute test function */ - interactiveTest(test, &general_info); + interactiveTest(test, multiio, &general_info); - general_info.config->listens = distrend_listens_new(&general_info); + general_info.config->listens = distrend_listens_new(multiio, &general_info, general_info.config->options); if(!general_info.config->listens) { fprintf(stderr, "error initializing listens\n"); return 1; } + remoteio_generic_data_set(general_info.config->options->remoteio, general_info.config->listens); for(counter = 0; general_info.config->listen_ports[counter]; counter ++) { tmp = distrend_listen_add(general_info.config->listens, general_info.config->listen_ports[counter]); @@ -185,7 +189,8 @@ int main(int argc, char *argv[]) { int clientrequest = 0; /*< temporary example variable, will be replaced when we can handle messages */ - distrend_accept(general_info.config->listens); + multiio_poll(multiio); + /* distrend_accept(general_info.config->listens); */ /* Run the watchdog, @TODO: like every 10 mins or something */ frame_watchdog(general_info.conn); @@ -236,7 +241,7 @@ int distrend_handle_version(struct gener if(client->state != DISTREND_CLIENT_PREVERSION) { - distrend_send_disconnect(geninfo->config->listens, client, "You have already sent the VERSION command."); + distrend_send_disconnect(client, "You have already sent the VERSION command."); } if(strlen(PACKAGE_STRING) == req_len && !strncmp(PACKAGE_STRING, req_data, req_len)) @@ -251,7 +256,7 @@ int distrend_handle_version(struct gener client->state = DISTREND_CLIENT_PREAUTH; distren_request_new(&newreq, strlen(PACKAGE_STRING), DISTREN_REQUEST_VERSION); - distrend_client_write_request(geninfo->config->listens, client, newreq, PACKAGE_STRING); + distrend_client_write_request(client, newreq, PACKAGE_STRING); distren_request_free(newreq); } else @@ -266,7 +271,7 @@ int distrend_handle_version(struct gener fixedbuf[req_len] = '\0'; _distren_asprintf(&tmp_str, "You have tried to connect to a %s server when your client claims to be running %s. Bye ;-)\n", PACKAGE_STRING, fixedbuf); - distrend_send_disconnect(geninfo->config->listens, client, tmp_str); + distrend_send_disconnect(client, tmp_str); } return 0; @@ -277,14 +282,14 @@ int distrend_handle_ping(struct general_ struct distren_request *pong_req; if(req_len > 32) - distrend_send_disconnect(geninfo->config->listens, client, "You have tried to send a PING packet with a length longer than 32 bytes."); + distrend_send_disconnect(client, "You have tried to send a PING packet with a length longer than 32 bytes."); /** respond to the client using the data he sent in his PONG command. */ distren_request_new(&pong_req, req_len, DISTREN_REQUEST_PONG); - distrend_client_write_request(geninfo->config->listens, client, pong_req, req_data); + distrend_client_write_request(client, pong_req, req_data); distren_request_free(pong_req); return 0; @@ -299,7 +304,7 @@ int distrend_do() } /* Grabs config info from confs */ -int distrend_do_config(int argc, char *argv[], struct distrend_config **config) +int distrend_do_config(int argc, char *argv[], struct distrend_config **config, multiio_context_t multiio) { unsigned int counter; @@ -334,7 +339,7 @@ int distrend_do_config(int argc, char *a myopts[5].simple_value = &(*config)->mysql_pass; myopts[6].simple_value = &(*config)->mysql_database; - if(options_init(argc, argv, &(*config)->mycfg, myopts, "daemon", &(*config)->options)) + if(options_init(argc, argv, &(*config)->mycfg, myopts, "daemon", &(*config)->options, multiio)) return 1; /** @@ -509,7 +514,7 @@ int update_xml_joblist(struct general_in /** Interactive test for the queuing system */ /* @QUEUE: Test uses methods not present in C code using mysql web-based system */ -int interactiveTest(int test, struct general_info *geninfo) +int interactiveTest(int test, multiio_context_t multiio, struct general_info *geninfo) { int command; int32_t slaveKey = 1; @@ -593,14 +598,7 @@ int interactiveTest(int test, struct gen case 5: while(1) { - distrend_accept(geninfo->config->listens); - /* - code for reading data from clients either goes here or in distrend_accept(). - it might make sense for us to just pass the distrend_accept() function a - callback which can handle packets or to have a generic packet handling - subsystem which gathers data into groups defined by by packet.h and then - passed onto the callback. - */ + multiio_poll(multiio); } break;