parse_rr.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /*
  2. * $Id$
  3. *
  4. * Route & Record-Route Parser
  5. *
  6. * Copyright (C) 2001-2003 Fhg Fokus
  7. *
  8. * This file is part of ser, a free SIP server.
  9. *
  10. * ser is free software; you can redistribute it and/or modify
  11. * it under the terms of the GNU General Public License as published by
  12. * the Free Software Foundation; either version 2 of the License, or
  13. * (at your option) any later version
  14. *
  15. * For a license to use the ser software under conditions
  16. * other than those described here, or to purchase support for this
  17. * software, please contact iptel.org by e-mail at the following addresses:
  18. * [email protected]
  19. *
  20. * ser is distributed in the hope that it will be useful,
  21. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  22. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  23. * GNU General Public License for more details.
  24. *
  25. * You should have received a copy of the GNU General Public License
  26. * along with this program; if not, write to the Free Software
  27. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  28. */
  29. #ifndef PARSE_RR_H
  30. #define PARSE_RR_H
  31. #include <stdio.h>
  32. #include "msg_parser.h"
  33. #include "parse_nameaddr.h"
  34. #include "parse_param.h"
  35. #include "hf.h"
  36. /*
  37. * Structure representing a Route & Record-Route HF body
  38. */
  39. typedef struct rr {
  40. name_addr_t nameaddr; /* Name-addr part */
  41. param_t* r2; /* Hook to r2 parameter */
  42. param_t* params; /* Linked list of other parameters */
  43. int len; /* Length of the whole route field */
  44. struct rr* next; /* Next RR in the list */
  45. } rr_t;
  46. /*
  47. * Parse Route & Record-Route header fields
  48. */
  49. int parse_rr(struct hdr_field* _r);
  50. /*
  51. * Parse the body of Route & Record-Route headers
  52. */
  53. int parse_rr_body(char *buf, int len, rr_t **head);
  54. /*
  55. * Free list of rr
  56. * _c is head of the list
  57. */
  58. void free_rr(rr_t** _r);
  59. /*
  60. * Free list of rr
  61. * _c is head of the list
  62. */
  63. void shm_free_rr(rr_t** _r);
  64. /*
  65. * Print list of rrs, just for debugging
  66. */
  67. void print_rr(FILE* _o, rr_t* _r);
  68. /*
  69. * Duplicate a single rr_t structure using pkg_malloc
  70. */
  71. int duplicate_rr(rr_t** _new, rr_t* _r);
  72. /*
  73. * Duplicate a single rr_t structure using pkg_malloc
  74. */
  75. int shm_duplicate_rr(rr_t** _new, rr_t* _r);
  76. #endif /* PARSE_RR_H */