|
@@ -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
|
+}
|