Annotation of embedaddon/dnsmasq/src/outpacket.c, revision 1.1.1.1

1.1       misho       1: /* dnsmasq is Copyright (c) 2000-2013 Simon Kelley
                      2: 
                      3:    This program is free software; you can redistribute it and/or modify
                      4:    it under the terms of the GNU General Public License as published by
                      5:    the Free Software Foundation; version 2 dated June, 1991, or
                      6:    (at your option) version 3 dated 29 June, 2007.
                      7:  
                      8:    This program is distributed in the hope that it will be useful,
                      9:    but WITHOUT ANY WARRANTY; without even the implied warranty of
                     10:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     11:    GNU General Public License for more details.
                     12:      
                     13:    You should have received a copy of the GNU General Public License
                     14:    along with this program.  If not, see <http://www.gnu.org/licenses/>.
                     15: */
                     16: 
                     17: 
                     18: #include "dnsmasq.h"
                     19:  
                     20: #ifdef HAVE_DHCP6
                     21: 
                     22: static size_t outpacket_counter;
                     23: 
                     24: void end_opt6(int container)
                     25: {
                     26:    void *p = daemon->outpacket.iov_base + container + 2;
                     27:    u16 len = outpacket_counter - container - 4 ;
                     28:    
                     29:    PUTSHORT(len, p);
                     30: }
                     31: 
                     32: int save_counter(int newval)
                     33: {
                     34:   int ret = outpacket_counter;
                     35:   if (newval != -1)
                     36:     outpacket_counter = newval;
                     37: 
                     38:   return ret;
                     39: }
                     40: 
                     41: void *expand(size_t headroom)
                     42: {
                     43:   void *ret;
                     44: 
                     45:   if (expand_buf(&daemon->outpacket, outpacket_counter + headroom))
                     46:     {
                     47:       ret = daemon->outpacket.iov_base + outpacket_counter;
                     48:       outpacket_counter += headroom;
                     49:       return ret;
                     50:     }
                     51:   
                     52:   return NULL;
                     53: }
                     54:     
                     55: int new_opt6(int opt)
                     56: {
                     57:   int ret = outpacket_counter;
                     58:   void *p;
                     59: 
                     60:   if ((p = expand(4)))
                     61:     {
                     62:       PUTSHORT(opt, p);
                     63:       PUTSHORT(0, p);
                     64:     }
                     65: 
                     66:   return ret;
                     67: }
                     68: 
                     69: void *put_opt6(void *data, size_t len)
                     70: {
                     71:   void *p;
                     72: 
                     73:   if ((p = expand(len)))
                     74:     memcpy(p, data, len);   
                     75: 
                     76:   return p;
                     77: }
                     78:   
                     79: void put_opt6_long(unsigned int val)
                     80: {
                     81:   void *p;
                     82:   
                     83:   if ((p = expand(4)))  
                     84:     PUTLONG(val, p);
                     85: }
                     86: 
                     87: void put_opt6_short(unsigned int val)
                     88: {
                     89:   void *p;
                     90: 
                     91:   if ((p = expand(2)))
                     92:     PUTSHORT(val, p);   
                     93: }
                     94: 
                     95: void put_opt6_char(unsigned int val)
                     96: {
                     97:   unsigned char *p;
                     98: 
                     99:   if ((p = expand(1)))
                    100:     *p = val;   
                    101: }
                    102: 
                    103: void put_opt6_string(char *s)
                    104: {
                    105:   put_opt6(s, strlen(s));
                    106: }
                    107: 
                    108: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>