sctp_strcliecho.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #include "unp.h"
  2. #define SCTP_MAXLINE 800
  3. void
  4. sctpstr_cli_echoall(FILE *fp, int sock_fd, struct sockaddr *to, socklen_t tolen)
  5. {
  6. struct sockaddr_in peeraddr;
  7. struct sctp_sndrcvinfo sri;
  8. char sendline[SCTP_MAXLINE], recvline[SCTP_MAXLINE];
  9. socklen_t len;
  10. int rd_sz,i,strsz;
  11. int msg_flags;
  12. bzero(sendline,sizeof(sendline));
  13. bzero(&sri,sizeof(sri));
  14. while (fgets(sendline, SCTP_MAXLINE - 9, fp) != NULL) {
  15. strsz = strlen(sendline);
  16. if(sendline[strsz-1] == '\n') {
  17. sendline[strsz-1] = '\0';
  18. strsz--;
  19. }
  20. for(i=0;i<SERV_MAX_SCTP_STRM;i++) {
  21. snprintf(sendline + strsz, sizeof(sendline) - strsz,
  22. ".msg.%d", i);
  23. Sctp_sendmsg(sock_fd, sendline, sizeof(sendline),
  24. to, tolen,
  25. 0, 0,
  26. i,
  27. 0, 0);
  28. }
  29. for(i=0;i<SERV_MAX_SCTP_STRM;i++) {
  30. len = sizeof(peeraddr);
  31. rd_sz = Sctp_recvmsg(sock_fd, recvline, sizeof(recvline),
  32. (SA *)&peeraddr, &len,
  33. &sri,&msg_flags);
  34. printf("From str:%d seq:%d (assoc:0x%x):",
  35. sri.sinfo_stream,sri.sinfo_ssn,
  36. (u_int)sri.sinfo_assoc_id);
  37. printf("%.*s\n",rd_sz,recvline);
  38. }
  39. }
  40. }