routent.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /*
  2. * routent.c
  3. * Onion Router and related definitions.
  4. *
  5. * Matej Pfajfar <mp292@cam.ac.uk>
  6. */
  7. /*
  8. * Changes :
  9. * $Log$
  10. * Revision 1.1 2002/06/26 22:45:50 arma
  11. * Initial revision
  12. *
  13. * Revision 1.6 2002/04/02 14:27:11 badbytes
  14. * Final finishes.
  15. *
  16. * Revision 1.5 2002/03/12 23:38:54 mp292
  17. * Being pedantic about some pointer conversions.
  18. *
  19. * Revision 1.4 2002/03/03 00:24:26 mp292
  20. * Corrected paths to some #include files.
  21. *
  22. * Revision 1.3 2002/03/03 00:06:45 mp292
  23. * Modifications to support re-transmission.
  24. *
  25. * Revision 1.2 2002/01/26 19:26:55 mp292
  26. * Reviewed according to Secure-Programs-HOWTO.
  27. *
  28. * Revision 1.1 2002/01/10 08:28:33 badbytes
  29. * routent and routentEX related routines
  30. *
  31. */
  32. #include "policies.h"
  33. #include "routent.h"
  34. routentEX_t *id_router(routentEX_t **routerarray, size_t rarray_len, uint32_t addr, uint16_t port)
  35. {
  36. routentEX_t *router;
  37. int i;
  38. if (!routerarray)
  39. return NULL;
  40. for(i=0;i<rarray_len;i++)
  41. {
  42. router = routerarray[i];
  43. if ((router->addr == addr) && (router->port == port))
  44. return router;
  45. }
  46. return NULL;
  47. }
  48. routentEX_t *id_routerbys(routentEX_t **routerarray, size_t rarray_len, int s)
  49. {
  50. routentEX_t *router;
  51. int i;
  52. if (!routerarray)
  53. return NULL;
  54. for(i=0;i<rarray_len;i++)
  55. {
  56. router = routerarray[i];
  57. if (router->s == s)
  58. return router;
  59. }
  60. return NULL;
  61. }
  62. conn_buf_t *new_conn_buf(uint16_t aci, int policy, conn_buf_t **conn_bufs, conn_buf_t **last_conn_buf)
  63. {
  64. conn_buf_t *conn_buf;
  65. if ((!aci) || (!conn_bufs) || (!last_conn_buf)) /* invalid parameters */
  66. return NULL;
  67. conn_buf = (conn_buf_t *)malloc(sizeof(conn_buf_t));
  68. if (!conn_buf)
  69. return NULL;
  70. memset((void *)conn_buf,0,sizeof(conn_buf_t));
  71. conn_buf->win_size = DEFAULT_WINDOW_SIZE;
  72. conn_buf->win_avail = DEFAULT_WINDOW_SIZE;
  73. conn_buf->aci = aci;
  74. conn_buf->policy = policy;
  75. if (!*conn_bufs)
  76. {
  77. *conn_bufs = conn_buf;
  78. }
  79. else
  80. {
  81. (*last_conn_buf)->next=(void *)conn_buf;
  82. conn_buf->prev = (void *)*last_conn_buf;
  83. }
  84. *last_conn_buf = conn_buf;
  85. return conn_buf;
  86. }
  87. int remove_conn_buf(conn_buf_t *conn_buf, conn_buf_t **conn_bufs, conn_buf_t **last_conn_buf)
  88. {
  89. if ( (!conn_buf) || (!*conn_bufs) || (!*last_conn_buf) ) /* invalid parameters */
  90. return -1;
  91. if (conn_buf->next)
  92. ((conn_buf_t *)(conn_buf->next))->prev = conn_buf->prev;
  93. if (conn_buf->prev)
  94. ((conn_buf_t *)(conn_buf->prev))->next = conn_buf->next;
  95. if (conn_buf == *last_conn_buf)
  96. *last_conn_buf = (conn_buf_t *)conn_buf->prev;
  97. if (conn_buf == *conn_bufs)
  98. *conn_bufs = (conn_buf_t *)conn_buf->next;
  99. if (conn_buf->buf)
  100. free((void *)conn_buf->buf);
  101. free((void *)conn_buf);
  102. return 0;
  103. }
  104. conn_buf_t *id_conn_buf(conn_buf_t *conn_bufs, uint16_t aci)
  105. {
  106. conn_buf_t *conn_buf;
  107. if ( (!aci) || (!conn_bufs) )
  108. return NULL;
  109. conn_buf = conn_bufs;
  110. while (conn_buf)
  111. {
  112. if (conn_buf->aci == aci)
  113. return conn_buf;
  114. conn_buf = conn_buf->next;
  115. }
  116. return NULL;
  117. }