]> jspc29.x-matter.uni-frankfurt.de Git - trbnettools.git/commitdiff
added improvements suggested by llmbot.gsi.de (qwen3.6)
authorJörn Adamczewski-Musch <j.adamczewski@gsi.de>
Wed, 12 Aug 2026 11:15:42 +0000 (13:15 +0200)
committerJörn Adamczewski-Musch <j.adamczewski@gsi.de>
Wed, 12 Aug 2026 11:15:42 +0000 (13:15 +0200)
to be tested still

libtrbnet/trbnet.c

index d2bcacd2a0792653456b10c90f8d9aee23e694c7..b24c0c3270494135ab48359e6695b55007a4b73b 100644 (file)
@@ -27,6 +27,7 @@ const char trbnet_version[] = "Revision " TRBNET_VERSION " UNKNOWN, i.e. ERROR";
 
 //#define TRB_DEBUGGER 1
 
+//#define TRB3 1
 
 /* Used by trb_register_modify and trb_nettrace */
 #define TMP_DATA_SIZE (1024 * 2)
@@ -446,13 +447,16 @@ static int getUDPPackage()
        static uint16_t dataBufferTemp[32768 * 2]; // temporary buffer for multi-packet responses
 
 // gk this fragment rewritten to support multi-packet responses
-       while(1) {
+       const unsigned int udp_max_packets = 64;
+       while(pkt_nr < udp_max_packets) {
     
     // JAM2026: moved this inside receiver loop
       FD_ZERO(&fds);
   FD_SET(trb3_sockfd, &fds);
   
-  status = pselect(trb3_sockfd + 1, &fds, NULL, NULL, &tv, NULL);
+  // Use shorter timeout after first packet to avoid accumulating excessive delays
+  const struct timespec recv_timeout = { .tv_sec = 2, .tv_nsec = 0 };
+  status = pselect(trb3_sockfd + 1, &fds, NULL, NULL, pkt_nr == 0 ? &tv : &recv_timeout, NULL);
   if (status == -1) {
     trb_errno = TRB_TRB3_SOCKET_ERROR;
     return -1;
@@ -462,16 +466,12 @@ static int getUDPPackage()
     return -1;
   } 
     
-    ///////////////////////////////////////
-    
-    
     
 
          status = recvfrom(trb3_sockfd,
                     (void*)dataBufferTemp,
-                    65536,
-                            //MSG_DONTWAIT,
-                    MSG_WAITALL, //MSG_DONTWAIT,
+                    sizeof(dataBufferTemp),
+                    0,
                     (struct sockaddr*)&in_addr,
                     &in_addr_len);
  
@@ -558,7 +558,193 @@ static int getUDPPackage()
                        //fprintf(stderr, "trb3_udp_version %d\n", trb3_udp_version);
                        break;
                }
- } 
+  } 
+  
+  // Check if we hit the packet limit without receiving a terminator
+  if (pkt_nr >= udp_max_packets) {
+    if (trb_debug > 1) {
+      fprintf(stderr, "getUDPPackage: max packet count (%u) exceeded\n", udp_max_packets);
+    }
+    trb_errno = TRB_TRB3_DATA_ERROR;
+    return -1;
+  }
+
+
+///////////// JAM 30-06-26: below artefact from qwen3.6 of llmbot.gsi.de
+//  return dataBufferSize * 2;
+//}
+//{
+//  struct sockaddr_in in_addr;
+//  socklen_t in_addr_len = sizeof(struct sockaddr_in);
+//  fd_set fds;      /* used by select call */
+//  int status;
+//  int i;
+//
+//  dataBufferSize = 0;
+//
+//  /* GetData */
+//  if (trb_debug > 2) {
+//    fprintf(stderr, "Wait UDP Data\n");
+//  }
+//
+//  /* Wait for data ready and Set Socket Timeout */
+////   FD_ZERO(&fds);
+////   FD_SET(trb3_sockfd, &fds);
+////
+////   status = pselect(trb3_sockfd + 1, &fds, NULL, NULL, &tv, NULL);
+////   if (status == -1) {
+////     trb_errno = TRB_TRB3_SOCKET_ERROR;
+////     return -1;
+////   }
+////   if (FD_ISSET(trb3_sockfd, &fds) == 0) {
+////     trb_errno = TRB_TRB3_SOCKET_TIMEOUT;
+////     return -1;
+////   }
+///////  JAM2026: moved down into while loop
+//
+//  /* Read Data */
+//
+//     uint8_t command_index_type = 2;
+//     uint8_t command_index_ret;
+//
+//     dataBufferSize = 0;
+//
+//     uint8_t pkt_nr = 0;
+//
+//     static uint16_t dataBufferTemp[32768 * 2]; // temporary buffer for multi-packet responses
+//
+//// gk this fragment rewritten to support multi-packet responses
+//     const unsigned int udp_max_packets = 64;
+//     while(pkt_nr < udp_max_packets) {
+//
+//    // JAM2026: moved this inside receiver loop
+//      FD_ZERO(&fds);
+//  FD_SET(trb3_sockfd, &fds);
+//
+//  status = pselect(trb3_sockfd + 1, &fds, NULL, NULL, &tv, NULL);
+//  if (status == -1) {
+//    trb_errno = TRB_TRB3_SOCKET_ERROR;
+//    return -1;
+//  }
+//  if (FD_ISSET(trb3_sockfd, &fds) == 0) {
+//    trb_errno = TRB_TRB3_SOCKET_TIMEOUT;
+//    return -1;
+//  }
+//
+//    ///////////////////////////////////////
+//
+//
+//
+//
+//       status = recvfrom(trb3_sockfd,
+//                    (void*)dataBufferTemp,
+//                    sizeof(dataBufferTemp),
+//                    0,
+//                    (struct sockaddr*)&in_addr,
+//                    &in_addr_len);
+//
+//             if (status == -1) {
+//             if (trb_debug > 2)
+//                     fprintf(stderr, "Received %d bytes\n", status);
+//                    (void*)dataBufferTemp,
+//                    sizeof(dataBufferTemp),
+//                    0,
+//                    (struct sockaddr*)&in_addr,
+//                    &in_addr_len);
+//                    (void*)dataBufferTemp,
+//                    65536,
+//                            //MSG_DONTWAIT,
+//                    MSG_WAITALL, //MSG_DONTWAIT,
+//                    (struct sockaddr*)&in_addr,
+//                    &in_addr_len);
+//
+//             if (trb_debug > 2)
+//                     fprintf(stderr, "Received %d bytes\n", status);
+//
+//             if (status == -1) {
+//               trb_errno = TRB_TRB3_SOCKET_ERROR;
+//               return -1;
+//             }
+//
+//             if (trb_debug > 2) {
+//               fprintf(stderr, "udp received: %d\n", status);
+//             }
+//
+//             //JAM26 debug:
+//             //fprintf(stderr, "dataBufferSize %d status %d pkt_nr %d\n", dataBufferSize, status, pkt_nr);
+//
+//             //for (i = 0; i < status / 2; i+= 2)
+//   //        for (i = 0; i < 40; i+= 2)
+//                     // fprintf(stdout, "%d: %04x %04x\n", i, (unsigned int) dataBufferTemp[i], (unsigned int) dataBufferTemp[i+1]);
+//
+//             // workaround for minimal successive packet
+//             //if (pkt_nr > 1 && status == 12) {
+//             //      dataBufferSize -= 1;
+//             //}
+//
+//
+//             /* Adjust endianess ... */
+//             for (i = 0; i < (status - (pkt_nr == 0 ? 0 : 2)) / 2; i++) {
+//                     dataBufferR[dataBufferSize + i] = ntohs(dataBufferTemp[i + (pkt_nr == 0 ? 0 : 1)]);
+//                     if (trb_debug > 2) {
+//                             fprintf(stderr, "%d  0x%04x\n", i, dataBufferR[i]);
+//                     }
+//             }
+//
+//             dataBufferSize += status / 2 - (pkt_nr == 0 ? 0 : 1);
+
+
+//             /* Check returned udp_command_index */
+//             if (trb3_udp_version == 2) {
+//                     command_index_type = (uint8_t)(dataBufferTemp[0] & 0x00ff);
+//                     command_index_ret = (uint8_t)(dataBufferTemp[0] >> 8);
+//
+//                     //fprintf(stderr, "index_type %d index_ret %d %d\n", command_index_type, command_index_ret, udp_command_index);
+//
+//                     if (command_index_type != 2 && command_index_type != 3 && command_index_type != 4) {
+//                             if (trb_debug > 1) {
+//                                     fprintf(stderr, "getUDPPackage: invalid command_index_type: %d\n",
+//                                     command_index_type);
+//                             }
+//                             trb_errno = TRB_TRB3_INVALID_UDP_HEADER;
+//                             fprintf(stderr, "exiting because of the command type");
+//                             return -1;
+//                     }
+//
+//               /*if (command_index_ret != udp_command_index) {
+//                 if (trb_debug > 1) {
+//                   fprintf(stderr,
+//                           "getUDPPackage: invalid : udp_command_index: "
+//                           "0x%02x != 0x%02x\n",
+//                           command_index_ret, udp_command_index);
+//                 }
+//                 trb_errno = TRB_TRB3_INVALID_UDP_HEADER;
+//                 return -1;
+//               }*/
+//
+//
+//                     if (command_index_type == 2) {
+//                             //fprintf(stderr, "getUDPPackage: received standard packet\n");
+//                             break;
+//                     }
+//                     else if (command_index_type == 3) {
+//                             //fprintf(stderr, "getUDPPackage: received multi-packet flag\n");
+//                             pkt_nr++;
+//                     }
+//                     else if (command_index_type == 4) {
+//                             //fprintf(stderr, "getUDPPackage: received end-of-response flag\n");
+//                             break;
+//                     }
+//
+//             }
+//             else {
+//                     //fprintf(stderr, "trb3_udp_version %d\n", trb3_udp_version);
+//                     break;
+//             }
+// }
+  
+///////////// JAM 30-06-26: end artefact from qwen3.6 of llmbot.gsi.de
+  
   //fprintf(stdout, "Total size: %d\n", dataBufferSize);
 
 //     for (i = 0; i < dataBufferSize; i+=2)