Пример #1
0
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;
  }
}
Пример #2
0
/*** 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));
}
Пример #3
0
/*** 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));
}
Пример #4
0
/*** 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));
}
Пример #5
0
/*** 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));
}
Пример #6
0
/*** 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));
}
Пример #7
0
/*** 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 */
}