void do_service(struct xnbd_session *ses) { int ret; struct xnbd_info *xnbd = ses->xnbd; if (xnbd->proxymode) { dbg("proxy mode"); ret = proxy_server(ses); } else { dbg("target mode"); //xnbd->migrating_to_target = 0; if (xnbd->cow) ret = target_server_cow(ses); else ret = target_server(ses); } info("process got out from main loop, ret %d", ret); // if (xnbd->migrating_to_target) { // xnbd->proxymode = 0; // //xnbd->migrating_to_target = 0; // xnbd->diskpath = xnbd->cachepath; // goto serve_again; // } // info("shutdown xnbd done"); }
void proxy_start(int listenport, char *extproxyaddr, int extproxyport, int (*callback_fn)(), int comeback, int singlethread) { //printf("proxy_start: listenport = %d\n", listenport); proxy_listenport = listenport; proxy_extproxyaddr = extproxyaddr != NULL ? strdup(extproxyaddr) : NULL; proxy_extproxyport = extproxyport; proxy_callback_fn = callback_fn; //proxy_singlethread = 1; proxy_singlethread = singlethread; if (comeback) LaunchThread(proxy_server, NULL); else proxy_server(NULL); }