]> git.stg.codes - stg.git/blobdiff - projects/sgconf/main.cpp
Fix work with admins
[stg.git] / projects / sgconf / main.cpp
index d2671be4b9552084ba77c0934dccfd40fed9c473..ec7dadc77b1a7479e143d2b7959702389ec2626f 100644 (file)
@@ -181,9 +181,11 @@ double ParseCash(const char * c, string * message)
 double cash;
 char * msg;
 char * str;
 double cash;
 char * msg;
 char * str;
-str = new char[strlen(c)];
+str = new char[strlen(c) + 1];
+
+strncpy(str, c, strlen(c));
+str[strlen(c)] = 0;
 
 
-strcpy(str, c);
 msg = strchr(str, ':');
 
 if (msg)
 msg = strchr(str, ':');
 
 if (msg)
@@ -310,6 +312,22 @@ delete[] s;
 return ss;
 }
 //-----------------------------------------------------------------------------
 return ss;
 }
 //-----------------------------------------------------------------------------
+time_t ParseCreditExpire(const char * str)
+{
+struct tm brokenTime;
+
+brokenTime.tm_wday = 0;
+brokenTime.tm_yday = 0;
+brokenTime.tm_isdst = 0;
+brokenTime.tm_hour = 0;
+brokenTime.tm_min = 0;
+brokenTime.tm_sec = 0;
+
+stg_strptime(str, "%Y-%m-%d", &brokenTime);
+
+return stg_timegm(&brokenTime);
+}
+//-----------------------------------------------------------------------------
 void ParseAnyString(const char * c, string * msg, const char * enc)
 {
 iconv_t cd;
 void ParseAnyString(const char * c, string * msg, const char * enc)
 {
 iconv_t cd;
@@ -417,6 +435,12 @@ if (!req->credit.res_empty())
     strcat(r, str);
     }
 
     strcat(r, str);
     }
 
+if (!req->creditExpire.res_empty())
+    {
+    sprintf(str, "<creditExpire value=\"%ld\"/>\n", req->creditExpire.const_data());
+    strcat(r, str);
+    }
+
 if (!req->prepaidTraff.res_empty())
     {
     sprintf(str, "<FreeMb value=\"%f\"/>\n", req->prepaidTraff.const_data());
 if (!req->prepaidTraff.res_empty())
     {
     sprintf(str, "<FreeMb value=\"%f\"/>\n", req->prepaidTraff.const_data());
@@ -679,7 +703,7 @@ REQUEST req;
 RESETABLE<string>   t1;
 int missedOptionArg = false;
 
 RESETABLE<string>   t1;
 int missedOptionArg = false;
 
-const char * short_options_get = "s:p:a:w:u:crtmodieNADLPGISO";
+const char * short_options_get = "s:p:a:w:u:crtmodieNADLPGISOE";
 int option_index = -1;
 
 while (1)
 int option_index = -1;
 
 while (1)
@@ -724,6 +748,10 @@ while (1)
             req.credit = 1;
             break;
 
             req.credit = 1;
             break;
 
+        case 'E': //credit expire
+            req.creditExpire = 1;
+            break;
+
         case 'd': //down
             req.down = 1;
             break;
         case 'd': //down
             req.down = 1;
             break;
@@ -858,7 +886,7 @@ REQUEST req;
 
 RESETABLE<string>   t1;
 
 
 RESETABLE<string>   t1;
 
-const char * short_options_set = "s:p:a:w:u:c:r:t:m:o:d:i:e:v:nlN:A:D:L:P:G:I:S:O:";
+const char * short_options_set = "s:p:a:w:u:c:r:t:m:o:d:i:e:v:nlN:A:D:L:P:G:I:S:O:E:";
 
 int missedOptionArg = false;
 
 
 int missedOptionArg = false;
 
@@ -910,6 +938,10 @@ while (1)
             req.credit = ParseCredit(optarg);
             break;
 
             req.credit = ParseCredit(optarg);
             break;
 
+        case 'E': //credit expire
+            req.creditExpire = ParseCreditExpire(optarg);
+            break;
+
         case 'd': //down
             req.down = ParseDownPassive(optarg);
             break;
         case 'd': //down
             req.down = ParseDownPassive(optarg);
             break;
@@ -946,7 +978,7 @@ while (1)
             break;
 
         case 'A': //nAme
             break;
 
         case 'A': //nAme
-            ParseAnyString(optarg, &str, "koi8-r");
+            ParseAnyString(optarg, &str, "koi8-ru");
             req.name = str;
             break;
 
             req.name = str;
             break;