Просмотр исходного кода

cmUdpPort.h/c : Added cmUdpTest() and cmUdpTestV().

master
Kevin Larke 9 лет назад
Родитель
Сommit
b416cb5a65
2 измененных файлов: 92 добавлений и 2 удалений
  1. 88
    0
      cmUdpPort.c
  2. 4
    2
      cmUdpPort.h

+ 88
- 0
cmUdpPort.c Просмотреть файл

@@ -612,3 +612,91 @@ const cmChar_t* cmUdpHostName( cmUdpH_t h )
612 612
   p->hnameBuf[HOST_NAME_MAX] = 0;
613 613
   return p->hnameBuf;
614 614
 }
615
+
616
+//=======================================================================================
617
+void cmUdpCallbackTest( void* cbArg, const char* data, unsigned dataByteCnt, const struct sockaddr_in* fromAddr )
618
+{
619
+  printf("%s\n",data);
620
+}
621
+
622
+
623
+cmUdpRC_t cmUdpTest( cmCtx_t* ctx, const char* remoteIpAddr, cmUdpPort_t port )
624
+{
625
+  cmUdpRC_t rc             = kOkUdpRC;
626
+  cmUdpH_t  h              = cmUdpNullHandle;
627
+  cmErr_t*  err            = &ctx->err;
628
+  unsigned  recvBufByteCnt = 4096;
629
+  unsigned  recvTimeOutMs  = 50;
630
+  unsigned  udpFlags       = kNonBlockingUdpFl | kBroadcastUdpFl | kNoQueueUdpFl;
631
+  unsigned  strN           = 1024;
632
+  char      str[ strN ];
633
+  struct sockaddr_in addr;
634
+
635
+  // allocate the UDP port
636
+  if((rc = cmUdpAlloc(ctx, &h )) != kOkUdpRC )
637
+    return cmErrMsg(err,rc,"UDP port allocate failed.");
638
+
639
+  // initialize the UDP port
640
+  if((rc = cmUdpInit( h, port, udpFlags, cmUdpCallbackTest, NULL, NULL, 0, recvBufByteCnt, recvTimeOutMs )) != kOkUdpRC )
641
+  {
642
+    rc = cmErrMsg(err,rc,"UPD port initialzation failed.");
643
+    goto errLabel;
644
+  }
645
+
646
+  // convert the IP address to a sockaddr_in
647
+  if((rc = cmUdpInitAddr(h, remoteIpAddr, port, &addr )) != kOkUdpRC )
648
+  {
649
+    rc = cmErrMsg(err,rc,"IP address conversion failed.");
650
+    goto errLabel;
651
+  }
652
+
653
+
654
+  // start up the UDP port listening thread
655
+  if((rc = cmUdpEnableListen(h, true )) != kOkUdpRC )
656
+  {
657
+    rc = cmErrMsg(err,rc,"UDP port switch to listen mode failed.");
658
+    goto errLabel;
659
+  }
660
+
661
+  printf("q=quit");
662
+
663
+  while(1)
664
+  {
665
+    printf("$");
666
+    fflush(stdout);
667
+    scanf("%s",str);
668
+
669
+    if( strlen(str) > 0 )
670
+    {
671
+      if( strcmp(str,"q")==0 )
672
+        break;
673
+
674
+      if((rc = cmUdpSendTo(h,str,strlen(str)+1,&addr)) != kOkUdpRC )
675
+      {
676
+        rc = cmErrMsg(err,rc,"UDP send failed.");
677
+        goto errLabel;
678
+      }
679
+    }
680
+  }
681
+
682
+
683
+  errLabel:
684
+    if((rc = cmUdpFree(&h)) != kOkUdpRC )
685
+      rc = cmErrMsg(err,rc,"UDP port free failed.");
686
+
687
+    return rc;
688
+}
689
+
690
+
691
+cmUdpRC_t cmUdpTestV( cmCtx_t* ctx, unsigned argc, const char* argv[])
692
+{
693
+  if( argc < 3 )
694
+    return cmErrMsg(&ctx->err,kTestFailUdpRC,"cmUdpTestV usage: argv[1]=<IP Addr> argv[2]=<Socket Port Number>");
695
+
696
+  const char* ipAddr = argv[1];
697
+  cmUdpPort_t port   = atoi(argv[2]);
698
+
699
+  cmRptPrintf(&ctx->rpt,"UDP Test Sending To: %s port:%i\n",ipAddr,port);
700
+
701
+  return cmUdpTest(ctx,ipAddr,port);
702
+}

+ 4
- 2
cmUdpPort.h Просмотреть файл

@@ -27,7 +27,8 @@ extern "C" {
27 27
     kBufTooSmallUdpRC,
28 28
     kHostNameFailUdpRC,
29 29
     kInvalidPortNumbUdpRC,
30
-    kTimeOutUdpRC
30
+    kTimeOutUdpRC,
31
+    kTestFailUdpRC
31 32
   };
32 33
 
33 34
   typedef cmRC_t         cmUdpRC_t;
@@ -136,7 +137,8 @@ extern "C" {
136 137
 
137 138
   const cmChar_t* cmUdpHostName( cmUdpH_t h );
138 139
 
139
-  
140
+  cmUdpRC_t cmUdpTest( cmCtx_t* ctx, const char* remoteIpAddr, cmUdpPort_t port );
141
+  cmUdpRC_t cmUdpTestV( cmCtx_t* ctx, unsigned argc, const char* argv[]);
140 142
 
141 143
 #ifdef __cplusplus
142 144
 }

Загрузка…
Отмена
Сохранить