]> git.seodisparate.com - UDPConnection/commitdiff
Fix warnings, some impl, still WIP
authorStephen Seo <seo.disparate@gmail.com>
Tue, 27 Aug 2019 05:06:27 +0000 (14:06 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Tue, 27 Aug 2019 05:06:27 +0000 (14:06 +0900)
cpp_impl/src/UDPC_Defines.hpp
cpp_impl/src/UDPConnection.cpp
cpp_impl/src/UDPConnection.h

index 2950d1172d9d7d4711e9e20a601db144536e48f7..d43abd1d78ede0c74504c3f90eb225dbc4200bce 100644 (file)
@@ -95,6 +95,7 @@ struct Context {
     Context(bool isThreaded);
 
     uint_fast32_t _contextIdentifier;
+
     char recvBuf[UDPC_PACKET_MAX_SIZE];
     /*
      * 0 - is threaded
index d7f85908772a5c2eb2a0c7635cf68abac8f4e545..7a2611b2958df89c309bde30240c0c76d1b2d12b 100644 (file)
@@ -147,6 +147,7 @@ float UDPC::durationToFSec(
 
 void *UDPC_init(uint16_t listenPort, uint32_t listenAddr, int isClient) {
     UDPC::Context *ctx = new UDPC::Context(false);
+    ctx->flags.set(1, isClient);
 
     // create socket
     ctx->socketHandle = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
@@ -223,7 +224,6 @@ void UDPC_update(void *ctx) {
         return;
     }
 
-    const auto prevNow = std::move(c->lastUpdated);
     const auto now = std::chrono::steady_clock::now();
     c->lastUpdated = now;
 
@@ -432,7 +432,7 @@ void UDPC_update(void *ctx) {
                 iter->second.rseq,
                 iter->second.ack,
                 &iter->second.lseq,
-                pInfo.flags & 0xC);
+                (pInfo.flags & 0x4) | (isResending ? 0x8 : 0));
             std::memcpy(buf.get() + 20, pInfo.data, pInfo.dataSize);
 
             struct sockaddr_in destinationInfo;
@@ -703,17 +703,42 @@ int UDPC_get_queue_send_available(void *ctx, uint32_t addr) {
     if(!c) {
         return 0;
     }
-    // TODO impl
-    return 0;
+
+    auto iter = c->conMap.find(addr);
+    if(iter != c->conMap.end()) {
+        return iter->second.sendPkts.capacity() - iter->second.sendPkts.size();
+    } else {
+        return 0;
+    }
 }
 
-void UDPC_queue_send(void *ctx, uint32_t destAddr, uint16_t destPort,
+void UDPC_queue_send(void *ctx, uint32_t destAddr,
                      uint32_t isChecked, void *data, uint32_t size) {
+    if(size == 0 || !data) {
+        return;
+    }
+
     UDPC::Context *c = UDPC::verifyContext(ctx);
     if(!c) {
         return;
     }
-    // TODO impl
+
+    auto iter = c->conMap.find(destAddr);
+    if(iter == c->conMap.end()) {
+        // TODO log failed to add packet to queue; unknown recipient
+        return;
+    }
+
+    UDPC_PacketInfo sendInfo;
+    std::memcpy(sendInfo.data, data, size);
+    sendInfo.dataSize = size;
+    sendInfo.sender = UDPC::LOCAL_ADDR;
+    sendInfo.senderPort = c->socketInfo.sin_port;
+    sendInfo.receiver = destAddr;
+    sendInfo.receiverPort = iter->second.port;
+    sendInfo.flags = (isChecked ? 0x0 : 0x4);
+
+    iter->second.sendPkts.push(sendInfo);
 }
 
 int UDPC_set_accept_new_connections(void *ctx, int isAccepting) {
@@ -724,12 +749,18 @@ int UDPC_set_accept_new_connections(void *ctx, int isAccepting) {
     return c->isAcceptNewConnections.exchange(isAccepting == 0 ? false : true);
 }
 
-int UDPC_drop_connection(void *ctx, uint32_t addr, uint16_t port) {
+int UDPC_drop_connection(void *ctx, uint32_t addr) {
     UDPC::Context *c = UDPC::verifyContext(ctx);
     if(!c) {
         return 0;
     }
-    // TODO impl
+
+    auto iter = c->conMap.find(addr);
+    if(iter != c->conMap.end()) {
+        c->conMap.erase(iter);
+        return 1;
+    }
+
     return 0;
 }
 
index bbd5160706f77c664d9820f70c4394dea7d2cec3..94a2383fca642071cb082b02a36caea6a3009053 100644 (file)
@@ -73,12 +73,12 @@ void UDPC_update(void *ctx);
 
 int UDPC_get_queue_send_available(void *ctx, uint32_t addr);
 
-void UDPC_queue_send(void *ctx, uint32_t destAddr, uint16_t destPort,
+void UDPC_queue_send(void *ctx, uint32_t destAddr,
                      uint32_t isChecked, void *data, uint32_t size);
 
 int UDPC_set_accept_new_connections(void *ctx, int isAccepting);
 
-int UDPC_drop_connection(void *ctx, uint32_t addr, uint16_t port);
+int UDPC_drop_connection(void *ctx, uint32_t addr);
 
 uint32_t UDPC_set_protocol_id(void *ctx, uint32_t id);