void launch_callmgr(struct in_addr inetaddr, int argc,char**argv,char**envp) { pid_t pid; int status; const char *callmgr = PPTP_CALLMGR_BINARY; /* fork and launch call manager process */ switch (pid=vfork()) { case -1: /* baaad */ pptp_error("callmgr vfork failed: %s", strerror(errno)); break; case 0: /* child */ { #if 0 int callmgr_main(int argc, char**argv, char**envp); char *my_argv[2] = { argv[0], inet_ntoa(inetaddr) }; char buf[128]; snprintf(buf, sizeof(buf), "pptp: call manager for %s", my_argv[1]); inststr(argc,argv,envp,buf); exit(callmgr_main(2, my_argv, envp)); #endif execlp(callmgr, callmgr, inet_ntoa(inetaddr), NULL); pptp_error("execlp() of call manager [%s] failed: %s", callmgr, strerror(errno)); exit(1); /* or we trash our parents stack */ } default: /* parent */ #if 0 /* we don't care about status */ waitpid(pid, &status, 0); if (status!=0) pptp_error("Call manager exited with error %d", status); #endif break; } }
/*** call the call manager main ***********************************************/ static void launch_callmgr(int call_id, struct in_addr inetaddr, char *phonenr, int window) { char win[10]; char call[10]; char *my_argv[9] = { "pptp", inet_ntoa(inetaddr), "--call_id", call, "--phone", phonenr, "--window", win, NULL }; char buf[128]; int argc = 0; char **argv = environ; sprintf(win, "%u", window); sprintf(call, "%u", call_id); snprintf(buf, sizeof(buf), "pptp: call manager for %s", my_argv[1]); if (argv && *argv) argv--; if (argv && *argv == NULL && progname) do { argv--; argc++; } while (argv && *argv && *argv > progname); if (argv && *argv == progname) inststr(argc, argv, environ, buf); exit(callmgr_main(8, my_argv, environ)); }
/*** call the call manager main ***********************************************/ static void launch_callmgr(int call_id,struct in_addr inetaddr, char *phonenr,int window) { dbglog("pptp: call manager for %s\n", inet_ntoa(inetaddr)); dbglog("window size:\t%d\n",window); if (phonenr) dbglog("phone number:\t'%s'\n",phonenr); dbglog("call id:\t%d\n",call_id); exit(callmgr_main(inetaddr, phonenr, window, call_id)); }
/*** call the call manager main ***********************************************/ void launch_callmgr(struct in_addr inetaddr, char *phonenr, int argc, char**argv,char**envp) { char *my_argv[3] = { argv[0], inet_ntoa(inetaddr), phonenr }; char buf[128]; snprintf(buf, sizeof(buf), "pptp: call manager for %s", my_argv[1]); inststr(argc, argv, envp, buf); exit(callmgr_main(3, my_argv, envp)); }
/*** call the call manager main ***********************************************/ static void launch_callmgr(int call_id,struct in_addr inetaddr, char *phonenr,int window) { char win[10]; char call[10]; char *my_argv[9] = { "pptp", inet_ntoa(inetaddr), "--call_id", call, "--phone", phonenr, "--window", win, NULL }; char buf[128]; sprintf(win, "%u", window); sprintf(call, "%u", call_id); snprintf(buf, sizeof(buf), "pptp: call manager for %s", my_argv[1]); //inststr(argc, argv, envp, buf); exit(callmgr_main(8, my_argv, environ)); }
/*** call the call manager main ***********************************************/ void launch_callmgr(struct in_addr inetaddr, char *phonenr, int argc __attribute__ ((unused)), char**argv,char**envp) { char *my_argv[3] = { argv[0], inet_ntoa(inetaddr), phonenr }; char buf[128]; snprintf(buf, sizeof(buf), "pptp: call manager for %s", my_argv[1]); #ifdef PR_SET_NAME int rc; rc = prctl(PR_SET_NAME, "pptpcm", 0, 0, 0); if (rc != 0) perror("prctl"); #else inststr(argc, argv, envp, buf); #endif exit(callmgr_main(3, my_argv, envp)); }
/*** call the call manager main ***********************************************/ void launch_callmgr(struct in_addr inetaddr, char *phonenr, int argc, char**argv,char**envp) { char *my_argv[3] = { argv[0], inet_ntoa(inetaddr), phonenr }; char buf[128]; snprintf(buf, sizeof(buf), "pptp: call manager for %s", my_argv[1]); inststr(argc, argv, envp, buf); /* Foxconn modified start, Winster Chan, 06/26/2006 */ //exit(callmgr_main(3, my_argv, envp)); int ret = callmgr_main(3, my_argv, envp); pptp_pppox_release(&poxfd, &pppfd); exit(ret); /* Foxconn modified end, Winster Chan, 06/26/2006 */ }