Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/SoftEtherVPN/SoftEtherVPN_Stable.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/Cedar/Command.c')
-rw-r--r--src/Cedar/Command.c101
1 files changed, 86 insertions, 15 deletions
diff --git a/src/Cedar/Command.c b/src/Cedar/Command.c
index e377d78c..41dbd289 100644
--- a/src/Cedar/Command.c
+++ b/src/Cedar/Command.c
@@ -3,9 +3,9 @@
//
// SoftEther VPN Server, Client and Bridge are free software under GPLv2.
//
-// Copyright (c) 2012-2014 Daiyuu Nobori.
-// Copyright (c) 2012-2014 SoftEther VPN Project, University of Tsukuba, Japan.
-// Copyright (c) 2012-2014 SoftEther Corporation.
+// Copyright (c) 2012-2016 Daiyuu Nobori.
+// Copyright (c) 2012-2016 SoftEther VPN Project, University of Tsukuba, Japan.
+// Copyright (c) 2012-2016 SoftEther Corporation.
//
// All Rights Reserved.
//
@@ -1331,6 +1331,27 @@ void TtsWorkerThread(THREAD *thread, void *param)
{
ret = Recv(ts->Sock, recv_buf_data, buf_size, false);
}
+
+ if (ts->FirstSendTick == 0)
+ {
+ ts->FirstSendTick = now;
+ }
+ else
+ {
+ if (ts->FirstSendTick <= now)
+ {
+ if (ts->Span != 0)
+ {
+ UINT64 giveup_tick = ts->FirstSendTick + ts->Span * 3ULL + 180000ULL;
+
+ if (now > giveup_tick)
+ {
+ ret = 0;
+ }
+ }
+ }
+ }
+
break;
case 3:
@@ -1757,6 +1778,7 @@ void TtcThread(THREAD *thread, void *param)
bool ok = false;
UINT buf_size;
UCHAR *send_buf_data, *recv_buf_data;
+ IP ip_ret;
// Validate arguments
if (thread == NULL || param == NULL)
{
@@ -1786,10 +1808,13 @@ void TtcThread(THREAD *thread, void *param)
ok = true;
+ Zero(&ip_ret, sizeof(ip_ret));
+
for (i = 0;i < ttc->NumTcp;i++)
{
SOCK *s;
TTC_SOCK *ts = ZeroMalloc(sizeof(TTC_SOCK));
+ char target_host[MAX_SIZE];
ts->Id = i + 1;
@@ -1806,7 +1831,14 @@ void TtcThread(THREAD *thread, void *param)
ts->Download = ((i % 2) == 0) ? true : false;
}
- s = ConnectEx2(ttc->Host, ttc->Port, 0, ttc->Cancel);
+ StrCpy(target_host, sizeof(target_host), ttc->Host);
+
+ if (IsZeroIp(&ip_ret) == false)
+ {
+ IPToStr(target_host, sizeof(target_host), &ip_ret);
+ }
+
+ s = ConnectEx4(target_host, ttc->Port, 0, ttc->Cancel, NULL, NULL, false, false, true, &ip_ret);
if (s == NULL)
{
@@ -2392,10 +2424,12 @@ UINT PtTrafficServer(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
LIST *o;
UINT ret = ERR_NO_ERROR;
UINT port;
+ bool nohup;
TTS *tts;
PARAM args[] =
{
{"[port]", NULL, NULL, NULL, NULL},
+ {"NOHUP", NULL, NULL, NULL, NULL},
};
// Get the parameter list
@@ -2411,8 +2445,18 @@ UINT PtTrafficServer(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
port = TRAFFIC_DEFAULT_PORT;
}
+ nohup = GetParamYes(o, "nohup");
+
tts = NewTts(port, c, PtTrafficPrintProc);
+ if (nohup)
+ {
+ while (true)
+ {
+ SleepThread(10000);
+ }
+ }
+
c->Write(c, _UU("TTS_ENTER_TO_EXIT"));
Free(c->ReadLine(c, L"", true));
@@ -9056,6 +9100,7 @@ UINT PsConfigGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
wchar_t tmp[MAX_SIZE];
UINT buf_size;
wchar_t *buf;
+ UNI_TOKEN_LIST *lines;
UniFormat(tmp, sizeof(tmp), _UU("CMD_ConfigGet_FILENAME"), t.FileName,
StrLen(t.FileData));
@@ -9067,7 +9112,19 @@ UINT PsConfigGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
Utf8ToUni(buf, buf_size, (BYTE *)t.FileData, StrLen(t.FileData));
- c->Write(c, buf);
+ lines = UniGetLines(buf);
+ if (lines != NULL)
+ {
+ UINT i;
+
+ for (i = 0;i < lines->NumTokens;i++)
+ {
+ c->Write(c, lines->Token[i]);
+ }
+
+ UniFreeToken(lines);
+ }
+
c->Write(c, L"");
Free(buf);
@@ -9982,7 +10039,7 @@ UINT PsLogFileGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
return ERR_INVALID_PARAMETER;
}
- filename = GetParamStr(o, "SAVE");
+ filename = GetParamStr(o, "SAVEPATH");
c->Write(c, _UU("CMD_LogFileGet_START"));
@@ -14961,6 +15018,7 @@ UINT PsAccessAddEx(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
{"DELAY", CmdPrompt, _UU("CMD_AccessAddEx_Prompt_DELAY"), CmdEvalMinMax, &minmax_delay},
{"JITTER", CmdPrompt, _UU("CMD_AccessAddEx_Prompt_JITTER"), CmdEvalMinMax, &minmax_jitter},
{"LOSS", CmdPrompt, _UU("CMD_AccessAddEx_Prompt_LOSS"), CmdEvalMinMax, &minmax_loss},
+ {"REDIRECTURL", NULL, NULL, NULL, NULL},
};
// If virtual HUB is not selected, it's an error
@@ -15004,6 +15062,7 @@ UINT PsAccessAddEx(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
a->Delay = GetParamInt(o, "DELAY");
a->Jitter = GetParamInt(o, "JITTER");
a->Loss = GetParamInt(o, "LOSS");
+ StrCpy(a->RedirectUrl, sizeof(a->RedirectUrl), GetParamStr(o, "REDIRECTURL"));
// RPC call
ret = ScAddAccess(ps->Rpc, &t);
@@ -15165,6 +15224,7 @@ UINT PsAccessAddEx6(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
{"DELAY", CmdPrompt, _UU("CMD_AccessAddEx6_Prompt_DELAY"), CmdEvalMinMax, &minmax_delay},
{"JITTER", CmdPrompt, _UU("CMD_AccessAddEx6_Prompt_JITTER"), CmdEvalMinMax, &minmax_jitter},
{"LOSS", CmdPrompt, _UU("CMD_AccessAddEx6_Prompt_LOSS"), CmdEvalMinMax, &minmax_loss},
+ {"REDIRECTURL", NULL, NULL, NULL, NULL},
};
// If virtual HUB is not selected, it's an error
@@ -15220,6 +15280,7 @@ UINT PsAccessAddEx6(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
a->Delay = GetParamInt(o, "DELAY");
a->Jitter = GetParamInt(o, "JITTER");
a->Loss = GetParamInt(o, "LOSS");
+ StrCpy(a->RedirectUrl, sizeof(a->RedirectUrl), GetParamStr(o, "REDIRECTURL"));
// RPC call
ret = ScAddAccess(ps->Rpc, &t);
@@ -18296,6 +18357,7 @@ UINT PsSecureNatStatusGet(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
CtInsert(ct, _UU("NM_STATUS_DHCP"), tmp);
CtInsert(ct, _UU("SM_SNAT_IS_KERNEL"), t.IsKernelMode ? _UU("SEC_YES") : _UU("SEC_NO"));
+ CtInsert(ct, _UU("SM_SNAT_IS_RAW"), t.IsRawIpMode ? _UU("SEC_YES") : _UU("SEC_NO"));
CtFree(ct, c);
}
@@ -22237,18 +22299,18 @@ void CtPrintCsv(CT *ct, CONSOLE *c)
{
UINT i, j;
UINT num_columns = LIST_NUM(ct->Columns);
- wchar_t buf[MAX_SIZE];
- wchar_t fmtbuf[MAX_SIZE];
+ wchar_t buf[MAX_SIZE*4];
+ wchar_t fmtbuf[MAX_SIZE*4];
// Show the heading row
buf[0] = 0;
for(i=0; i<num_columns; i++)
{
CTC *ctc = LIST_DATA(ct->Columns, i);
- CtEscapeCsv(fmtbuf, MAX_SIZE, ctc->String);
- UniStrCat(buf, MAX_SIZE, fmtbuf);
+ CtEscapeCsv(fmtbuf, sizeof(fmtbuf), ctc->String);
+ UniStrCat(buf, sizeof(buf), fmtbuf);
if(i != num_columns-1)
- UniStrCat(buf, MAX_SIZE, L",");
+ UniStrCat(buf, sizeof(buf), L",");
}
c->Write(c, buf);
@@ -22259,10 +22321,10 @@ void CtPrintCsv(CT *ct, CONSOLE *c)
buf[0] = 0;
for(i=0; i<num_columns; i++)
{
- CtEscapeCsv(fmtbuf, MAX_SIZE, ctr->Strings[i]);
- UniStrCat(buf, MAX_SIZE, fmtbuf);
+ CtEscapeCsv(fmtbuf, sizeof(fmtbuf), ctr->Strings[i]);
+ UniStrCat(buf, sizeof(buf), fmtbuf);
if(i != num_columns-1)
- UniStrCat(buf, MAX_SIZE, L",");
+ UniStrCat(buf, sizeof(buf), L",");
}
c->Write(c, buf);
}
@@ -23083,7 +23145,7 @@ UINT PsConnect(CONSOLE *c, char *host, UINT port, char *hub, char *adminhub, wch
// Failure
retcode = err;
- if (err == ERR_ACCESS_DENIED)
+ if (err == ERR_ACCESS_DENIED && c->ProgrammingMode == false)
{
char *pass;
// Password is incorrect
@@ -23389,6 +23451,7 @@ UINT VpnCmdProc(CONSOLE *c, char *cmd_name, wchar_t *str, void *param)
{"OUT", NULL, NULL, NULL, NULL},
{"CMD", NULL, NULL, NULL, NULL},
{"CSV", NULL, NULL, NULL, NULL},
+ {"PROGRAMMING", NULL, NULL, NULL, NULL},
};
#ifdef OS_WIN32
@@ -23608,6 +23671,7 @@ UINT CommandMain(wchar_t *command_line)
wchar_t *infile, *outfile;
char *a_infile, *a_outfile;
wchar_t *csvmode;
+ wchar_t *programming_mode;
CONSOLE *c;
// Validate arguments
@@ -23651,6 +23715,13 @@ UINT CommandMain(wchar_t *command_line)
c->ConsoleType = CONSOLE_CSV;
}
+ programming_mode = ParseCommand(command_line, L"programming");
+ if (programming_mode != NULL)
+ {
+ Free(programming_mode);
+ c->ProgrammingMode = true;
+ }
+
if (DispatchNextCmdEx(c, command_line, ">", cmd, sizeof(cmd) / sizeof(cmd[0]), NULL) == false)
{
ret = ERR_INVALID_PARAMETER;