Files
ngrok-c/param.cpp
dosgo fc19435af6 ..
2021-08-30 13:04:28 +08:00

163 lines
3.8 KiB
C++

#include "config.h"
#include <string>
#if WIN32
#include <windows.h>
#else
#include <arpa/inet.h>
#include <errno.h>
typedef long long __int64;
#endif
#include "param.h"
#include <stdlib.h>
using namespace std;
int loadargs(int argc, char **argv)
{
if (argc > 1)
{
char jsonstr[1024];
char temp[255];
int pos = 0;
char *argvstr;
int xpos;
int run = 1;
for (int i = 1; i < argc; i++)
{
argvstr = argv[i];
memset(jsonstr, 0, 1024);
memset(temp, 0, 255);
pos = strpos(argvstr, '[');
if (pos == -1)
{
printf("argv error:%s", argvstr);
}
else
{
if (strncmp(argvstr, "-SER", 4) == 0)
{
run = 1;
while (run)
{
memset(jsonstr, 0, 1024);
xpos = strpos(argvstr + pos + 1, ',');
if (xpos == -1)
{
xpos = strpos(argvstr + pos + 1, ']');
memcpy(jsonstr, argvstr + pos + 1, xpos);
run = 0;
}
else
{
memcpy(jsonstr, argvstr + pos + 1, xpos);
}
getvalue(jsonstr, "Shost", mainInfo.shost);
if (getvalue(jsonstr, "Sport", temp) == 0)
{
mainInfo.sport = atoi(temp);
}
getvalue(jsonstr, "Atoken", mainInfo.authtoken);
getvalue(jsonstr, "Password", mainInfo.pwdc);
if (getvalue(jsonstr, "Cid", temp) == 0)
{
mainInfo.ClientId = string(temp);
}
pos = pos + xpos + 1;
}
}
#if UDPTUNNEL
if (strncmp(argvstr, "-UDPSER", 7) == 0)
{
run = 1;
while (run)
{
memset(jsonstr, 0, 1024);
xpos = strpos(argvstr + pos + 1, ',');
if (xpos == -1)
{
xpos = strpos(argvstr + pos + 1, ']');
memcpy(jsonstr, argvstr + pos + 1, xpos);
run = 0;
}
else
{
memcpy(jsonstr, argvstr + pos + 1, xpos);
}
getvalue(jsonstr, "Shost", mainInfo.udphost);
if (getvalue(jsonstr, "Sport", temp) == 0)
{
mainInfo.udpport = atoi(temp);
}
pos = pos + xpos + 1;
}
mainInfo.udp = 1;
}
#endif
if (strncmp(argvstr, "-AddTun", 7) == 0)
{
run = 1;
TunnelInfo *tunnelinfo = (TunnelInfo *)malloc(sizeof(TunnelInfo));
memset(tunnelinfo, 0, sizeof(TunnelInfo));
while (run)
{
memset(jsonstr, 0, 1024);
xpos = strpos(argvstr + pos + 1, ',');
if (xpos == -1)
{
xpos = strpos(argvstr + pos + 1, ']');
memcpy(jsonstr, argvstr + pos + 1, xpos);
run = 0;
}
else
{
memcpy(jsonstr, argvstr + pos + 1, xpos);
}
getvalue(jsonstr, "Lhost", tunnelinfo->localhost);
getvalue(jsonstr, "Type", tunnelinfo->protocol);
memset(temp, 0, strlen(temp));
if (getvalue(jsonstr, "Lport", temp) == 0)
{
tunnelinfo->localport = atoi(temp);
}
if (getvalue(jsonstr, "Ltls", temp) == 0)
{
tunnelinfo->localtls = atoi(temp);
}
memset(temp, 0, strlen(temp));
if (getvalue(jsonstr, "Rport", temp) == 0)
{
tunnelinfo->remoteport = atoi(temp);
}
getvalue(jsonstr, "Sdname", tunnelinfo->subdomain);
getvalue(jsonstr, "Hostheader", tunnelinfo->hostheader);
getvalue(jsonstr, "Httpauth", tunnelinfo->httpauth);
//printf("httpAuth:%s\r\n",tunnelinfo->httpauth);
getvalue(jsonstr, "Hostname", tunnelinfo->hostname);
pos = pos + xpos + 1;
}
G_TunnelList.push_back(tunnelinfo);
}
}
}
}
else
{
echo("use ");
echo("%s", argv[0]);
echo(" -SER[Shost:ngrokd.ngrok.com,Sport:443,Atoken:xx,Password:xx] -AddTun[Type:tcp,Lhost:127.0.0.1,Lport:80,Rport:50199,Hostheader:localhost,Httpauth:\"test:test\"]");
echo("\r\n");
exit(1);
}
return 0;
}