/*===========================================================================* * main * *===========================================================================*/ PUBLIC int main(int argc, char **argv) { /* This is the main routine of this service. The main loop consists of * three major activities: getting new work, processing the work, and * sending the reply. The loop never terminates, unless a panic occurs. */ message m; int result; sigset_t sigset; /* Initialize the server, then go to work. */ init_server(argc, argv); /* Main loop - get work and do it, forever. */ while (TRUE) { /* Wait for incoming message, sets 'callnr' and 'who'. */ get_work(&m); switch (callnr) { case PROC_EVENT: sig_handler(); continue; case DS_PUBLISH: result = do_publish(&m); break; case DS_RETRIEVE: result = do_retrieve(&m); break; case DS_SUBSCRIBE: result = do_subscribe(&m); break; case GETSYSINFO: result = do_getsysinfo(&m); break; default: report("DS","warning, got illegal request from:", m.m_source); result = EINVAL; } /* Finally send reply message, unless disabled. */ if (result != EDONTREPLY) { m.m_type = result; /* build reply message */ reply(who_e, &m); /* send it away */ } } return(OK); /* shouldn't come here */ }
/*===========================================================================* * main * *===========================================================================*/ PUBLIC int main(int argc, char **argv) { /* This is the main routine of this service. The main loop consists of * three major activities: getting new work, processing the work, and * sending the reply. The loop never terminates, unless a panic occurs. */ message m; int result; /* SEF local startup. */ env_setargs(argc, argv); sef_local_startup(); /* Main loop - get work and do it, forever. */ while (TRUE) { /* Wait for incoming message, sets 'callnr' and 'who'. */ get_work(&m); if (is_notify(callnr)) { printf("DS: warning, got illegal notify from: %d\n", m.m_source); result = EINVAL; goto send_reply; } switch (callnr) { case DS_PUBLISH: result = do_publish(&m); break; case DS_RETRIEVE: result = do_retrieve(&m); break; case DS_RETRIEVE_LABEL: result = do_retrieve_label(&m); break; case DS_DELETE: result = do_delete(&m); break; case DS_SUBSCRIBE: result = do_subscribe(&m); break; case DS_CHECK: result = do_check(&m); break; case DS_SNAPSHOT: result = do_snapshot(&m); break; case GETSYSINFO: result = do_getsysinfo(&m); break; default: printf("DS: warning, got illegal request from %d\n", m.m_source); result = EINVAL; } send_reply: /* Finally send reply message, unless disabled. */ if (result != EDONTREPLY) { m.m_type = result; /* build reply message */ reply(who_e, &m); /* send it away */ } } return(OK); /* shouldn't come here */ }
int main(int argc, const char **argv) { amqp_connection_state_t conn; char *exchange = NULL; char *routing_key = NULL; char *content_type = NULL; char *content_encoding = NULL; char *body = NULL; amqp_basic_properties_t props; amqp_bytes_t body_bytes; int delivery = 1; /* non-persistent by default */ struct poptOption options[] = { INCLUDE_OPTIONS(connect_options), {"exchange", 'e', POPT_ARG_STRING, &exchange, 0, "the exchange to publish to", "exchange"}, {"routing-key", 'r', POPT_ARG_STRING, &routing_key, 0, "the routing key to publish with", "routing key"}, {"persistent", 'p', POPT_ARG_VAL, &delivery, 2, "use the persistent delivery mode", NULL}, {"content-type", 'C', POPT_ARG_STRING, &content_type, 0, "the content-type for the message", "content type"}, {"content-encoding", 'E', POPT_ARG_STRING, &content_encoding, 0, "the content-encoding for the message", "content encoding"}, {"body", 'b', POPT_ARG_STRING, &body, 0, "specify the message body", "body"}, POPT_AUTOHELP { NULL, 0, 0, NULL, 0 } }; process_all_options(argc, argv, options); if (!exchange && !routing_key) { fprintf(stderr, "neither exchange nor routing key specified\n"); return 1; } memset(&props, 0, sizeof props); props._flags = AMQP_BASIC_DELIVERY_MODE_FLAG; props.delivery_mode = 2; /* persistent delivery mode */ if (content_type) { props._flags |= AMQP_BASIC_CONTENT_TYPE_FLAG; props.content_type = amqp_cstring_bytes(content_type); } if (content_encoding) { props._flags |= AMQP_BASIC_CONTENT_ENCODING_FLAG; props.content_encoding = amqp_cstring_bytes(content_encoding); } conn = make_connection(); if (body) body_bytes = amqp_cstring_bytes(body); else body_bytes = read_all(0); do_publish(conn, exchange, routing_key, &props, body_bytes); if (!body) free(body_bytes.bytes); close_connection(conn); return 0; }