]> git.stg.codes - stg.git/commitdiff
Copy constructor, assignement operator and network initialization added
authorMaxim Mamontov <faust@gts.dp.ua>
Tue, 10 May 2011 15:03:28 +0000 (18:03 +0300)
committerMaxim Mamontov <faust@gts.dp.ua>
Tue, 10 May 2011 15:03:28 +0000 (18:03 +0300)
to USER

projects/sgauthstress/user.cpp
projects/sgauthstress/user.h

index c2092c265d2abc879c780404538a8534d0ada1f5..b36da5e1f1b3928603767088d6bc359d88ee25de 100644 (file)
@@ -2,9 +2,12 @@
 #include <netinet/in.h>
 
 #include <cstring>
 #include <netinet/in.h>
 
 #include <cstring>
+#include <cerrno>
+#include <stdexcept>
 
 #include "user.h"
 #include "stg/ia_packets.h"
 
 #include "user.h"
 #include "stg/ia_packets.h"
+#include "stg/common.h"
 
 USER::USER(const std::string & l,
            const std::string & pwd,
 
 USER::USER(const std::string & l,
            const std::string & pwd,
@@ -22,11 +25,61 @@ unsigned char key[IA_PASSWD_LEN];
 memset(key, 0, IA_PASSWD_LEN);
 strncpy((char *)key, password.c_str(), IA_PASSWD_LEN);
 Blowfish_Init(&ctx, key, IA_PASSWD_LEN);
 memset(key, 0, IA_PASSWD_LEN);
 strncpy((char *)key, password.c_str(), IA_PASSWD_LEN);
 Blowfish_Init(&ctx, key, IA_PASSWD_LEN);
+}
 
 
-sock = socket(AF_INET, SOCK_DGRAM, 0);
+USER::USER(const USER & rvalue)
+    : login(rvalue.login),
+      password(rvalue.password),
+      ip(rvalue.ip),
+      aliveTimeout(rvalue.aliveTimeout),
+      userTimeout(rvalue.userTimeout),
+      phase(1),
+      phaseChangeTime(0),
+      rnd(0)
+{
+unsigned char key[IA_PASSWD_LEN];
+memset(key, 0, IA_PASSWD_LEN);
+strncpy((char *)key, password.c_str(), IA_PASSWD_LEN);
+Blowfish_Init(&ctx, key, IA_PASSWD_LEN);
 }
 
 USER::~USER()
 {
 close(sock);
 }
 }
 
 USER::~USER()
 {
 close(sock);
 }
+
+const USER & USER::operator=(const USER & rvalue)
+{
+login = rvalue.login;
+password = rvalue.password;
+ip = rvalue.ip;
+aliveTimeout = rvalue.aliveTimeout;
+userTimeout = rvalue.userTimeout;
+phase = 1;
+phaseChangeTime = 0;
+rnd = 0;
+
+unsigned char key[IA_PASSWD_LEN];
+memset(key, 0, IA_PASSWD_LEN);
+strncpy((char *)key, password.c_str(), IA_PASSWD_LEN);
+Blowfish_Init(&ctx, key, IA_PASSWD_LEN);
+
+return *this;
+}
+
+bool USER::InitNetwork()
+{
+sock = socket(AF_INET, SOCK_DGRAM, 0);
+
+struct sockaddr_in addr;
+
+addr.sin_family = AF_INET;
+addr.sin_addr.s_addr = ip;
+addr.sin_port = htons(5554); // :(
+
+int res = bind(sock, (struct sockaddr *)&addr, sizeof(addr));
+if (res == -1)
+    {
+    throw std::runtime_error(std::string("USER::USER() - bind error: '") + strerror(errno) + "', ip: " + inet_ntostring(ip) + ", login: " + login);
+    }
+}
index 0bf533458c7e93ff1e0011fde2e19946708059d5..1aa6f9e38b68f2f86928e84759a753a25158144d 100644 (file)
@@ -12,8 +12,13 @@ class USER {
         USER(const std::string & login,
              const std::string & password,
              uint32_t ip);
         USER(const std::string & login,
              const std::string & password,
              uint32_t ip);
+        USER(const USER & rvalue);
         ~USER();
 
         ~USER();
 
+        const USER & operator=(const USER & rvalue);
+
+        bool InitNetwork();
+
         const std::string & GetLogin() const { return login; }
         uint32_t GetIP() const { return ip; }
         uint32_t GetAliveTimeout() const { return aliveTimeout; }
         const std::string & GetLogin() const { return login; }
         uint32_t GetIP() const { return ip; }
         uint32_t GetAliveTimeout() const { return aliveTimeout; }