sctp_strcliecho2.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. /* include modified_echo */
  21. for(i=0;i<SERV_MAX_SCTP_STRM;i++) {
  22. snprintf(sendline + strsz, sizeof(sendline) - strsz,
  23. ".msg.%d 1", i);
  24. Sctp_sendmsg(sock_fd, sendline, sizeof(sendline),
  25. to, tolen,
  26. 0, 0,
  27. i,
  28. 0, 0);
  29. snprintf(sendline + strsz, sizeof(sendline) - strsz,
  30. ".msg.%d 2", i);
  31. Sctp_sendmsg(sock_fd, sendline, sizeof(sendline),
  32. to, tolen,
  33. 0, 0,
  34. i,
  35. 0, 0);
  36. }
  37. for(i=0;i<SERV_MAX_SCTP_STRM*2;i++) {
  38. len = sizeof(peeraddr);
  39. /* end modified_echo */
  40. rd_sz = Sctp_recvmsg(sock_fd, recvline, sizeof(recvline),
  41. (SA *)&peeraddr, &len,
  42. &sri,&msg_flags);
  43. printf("From str:%d seq:%d (assoc:0x%x):",
  44. sri.sinfo_stream,sri.sinfo_ssn,
  45. (u_int)sri.sinfo_assoc_id);
  46. printf("%.*s\n",rd_sz,recvline);
  47. }
  48. }
  49. }