1*9c9af259SGordon Ross /* 2*9c9af259SGordon Ross * Copyright (c) 2000-2001 Boris Popov 3*9c9af259SGordon Ross * All rights reserved. 4*9c9af259SGordon Ross * 5*9c9af259SGordon Ross * Redistribution and use in source and binary forms, with or without 6*9c9af259SGordon Ross * modification, are permitted provided that the following conditions 7*9c9af259SGordon Ross * are met: 8*9c9af259SGordon Ross * 1. Redistributions of source code must retain the above copyright 9*9c9af259SGordon Ross * notice, this list of conditions and the following disclaimer. 10*9c9af259SGordon Ross * 2. Redistributions in binary form must reproduce the above copyright 11*9c9af259SGordon Ross * notice, this list of conditions and the following disclaimer in the 12*9c9af259SGordon Ross * documentation and/or other materials provided with the distribution. 13*9c9af259SGordon Ross * 3. All advertising materials mentioning features or use of this software 14*9c9af259SGordon Ross * must display the following acknowledgement: 15*9c9af259SGordon Ross * This product includes software developed by Boris Popov. 16*9c9af259SGordon Ross * 4. Neither the name of the author nor the names of any co-contributors 17*9c9af259SGordon Ross * may be used to endorse or promote products derived from this software 18*9c9af259SGordon Ross * without specific prior written permission. 19*9c9af259SGordon Ross * 20*9c9af259SGordon Ross * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 21*9c9af259SGordon Ross * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22*9c9af259SGordon Ross * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23*9c9af259SGordon Ross * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 24*9c9af259SGordon Ross * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25*9c9af259SGordon Ross * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26*9c9af259SGordon Ross * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27*9c9af259SGordon Ross * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28*9c9af259SGordon Ross * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29*9c9af259SGordon Ross * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30*9c9af259SGordon Ross * SUCH DAMAGE. 31*9c9af259SGordon Ross */ 32*9c9af259SGordon Ross 33*9c9af259SGordon Ross /* 34*9c9af259SGordon Ross * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 35*9c9af259SGordon Ross * Use is subject to license terms. 36*9c9af259SGordon Ross */ 37*9c9af259SGordon Ross 38*9c9af259SGordon Ross #ifndef _PRIVATE_H 39*9c9af259SGordon Ross #define _PRIVATE_H 40*9c9af259SGordon Ross 41*9c9af259SGordon Ross /* 42*9c9af259SGordon Ross * Private declarations for this library. 43*9c9af259SGordon Ross * Moved from smb_lib.h 44*9c9af259SGordon Ross */ 45*9c9af259SGordon Ross 46*9c9af259SGordon Ross #include <inttypes.h> 47*9c9af259SGordon Ross 48*9c9af259SGordon Ross /* 49*9c9af259SGordon Ross * BSD-style mbuf simulation 50*9c9af259SGordon Ross */ 51*9c9af259SGordon Ross struct mbuf { 52*9c9af259SGordon Ross int m_len; 53*9c9af259SGordon Ross int m_maxlen; 54*9c9af259SGordon Ross char *m_data; 55*9c9af259SGordon Ross struct mbuf *m_next; 56*9c9af259SGordon Ross }; 57*9c9af259SGordon Ross typedef struct mbuf mbuf_t; 58*9c9af259SGordon Ross 59*9c9af259SGordon Ross #if 0 /* in smb_lib.h */ 60*9c9af259SGordon Ross struct mbdata { 61*9c9af259SGordon Ross struct mbuf *mb_top; 62*9c9af259SGordon Ross struct mbuf *mb_cur; 63*9c9af259SGordon Ross char *mb_pos; 64*9c9af259SGordon Ross int mb_count; 65*9c9af259SGordon Ross }; 66*9c9af259SGordon Ross typedef struct mbdata mbdata_t; 67*9c9af259SGordon Ross #endif 68*9c9af259SGordon Ross 69*9c9af259SGordon Ross #define M_ALIGNFACTOR (sizeof (long)) 70*9c9af259SGordon Ross #define M_ALIGN(len) (((len) + M_ALIGNFACTOR - 1) & ~(M_ALIGNFACTOR - 1)) 71*9c9af259SGordon Ross #define M_BASESIZE (sizeof (struct mbuf)) 72*9c9af259SGordon Ross #define M_MINSIZE (256 - M_BASESIZE) 73*9c9af259SGordon Ross #define M_TOP(m) ((char *)(m) + M_BASESIZE) 74*9c9af259SGordon Ross #define M_TRAILINGSPACE(m) ((m)->m_maxlen - (m)->m_len) 75*9c9af259SGordon Ross #define mtod(m, t) ((t)(m)->m_data) 76*9c9af259SGordon Ross 77*9c9af259SGordon Ross /* 78*9c9af259SGordon Ross * request handling structures 79*9c9af259SGordon Ross */ 80*9c9af259SGordon Ross struct smb_rq { 81*9c9af259SGordon Ross uchar_t rq_cmd; 82*9c9af259SGordon Ross struct mbdata rq_rq; 83*9c9af259SGordon Ross struct mbdata rq_rp; 84*9c9af259SGordon Ross struct smb_ctx *rq_ctx; 85*9c9af259SGordon Ross int rq_wcount; 86*9c9af259SGordon Ross int rq_bcount; 87*9c9af259SGordon Ross }; 88*9c9af259SGordon Ross typedef struct smb_rq smb_rq_t; 89*9c9af259SGordon Ross 90*9c9af259SGordon Ross #define smb_rq_getrequest(rqp) (&(rqp)->rq_rq) 91*9c9af259SGordon Ross #define smb_rq_getreply(rqp) (&(rqp)->rq_rp) 92*9c9af259SGordon Ross 93*9c9af259SGordon Ross int smb_rq_init(struct smb_ctx *, uchar_t, size_t, struct smb_rq **); 94*9c9af259SGordon Ross void smb_rq_done(struct smb_rq *); 95*9c9af259SGordon Ross void smb_rq_wend(struct smb_rq *); 96*9c9af259SGordon Ross int smb_rq_simple(struct smb_rq *); 97*9c9af259SGordon Ross int smb_rq_dmem(struct mbdata *, const char *, size_t); 98*9c9af259SGordon Ross int smb_rq_dstring(struct mbdata *, const char *); 99*9c9af259SGordon Ross 100*9c9af259SGordon Ross 101*9c9af259SGordon Ross /* 102*9c9af259SGordon Ross * Message compose/parse 103*9c9af259SGordon Ross */ 104*9c9af259SGordon Ross 105*9c9af259SGordon Ross int m_getm(struct mbuf *, size_t, struct mbuf **); 106*9c9af259SGordon Ross int m_lineup(struct mbuf *, struct mbuf **); 107*9c9af259SGordon Ross int mb_init(struct mbdata *, size_t); 108*9c9af259SGordon Ross int mb_initm(struct mbdata *, struct mbuf *); 109*9c9af259SGordon Ross int mb_done(struct mbdata *); 110*9c9af259SGordon Ross int mb_fit(struct mbdata *mbp, size_t size, char **pp); 111*9c9af259SGordon Ross int mb_put_uint8(struct mbdata *, uint8_t); 112*9c9af259SGordon Ross int mb_put_uint16be(struct mbdata *, uint16_t); 113*9c9af259SGordon Ross int mb_put_uint16le(struct mbdata *, uint16_t); 114*9c9af259SGordon Ross int mb_put_uint32be(struct mbdata *, uint32_t); 115*9c9af259SGordon Ross int mb_put_uint32le(struct mbdata *, uint32_t); 116*9c9af259SGordon Ross int mb_put_uint64be(struct mbdata *, uint64_t); 117*9c9af259SGordon Ross int mb_put_uint64le(struct mbdata *, uint64_t); 118*9c9af259SGordon Ross int mb_put_mem(struct mbdata *, const char *, size_t); 119*9c9af259SGordon Ross int mb_put_pstring(struct mbdata *mbp, const char *s); 120*9c9af259SGordon Ross int mb_put_mbuf(struct mbdata *, struct mbuf *); 121*9c9af259SGordon Ross 122*9c9af259SGordon Ross int mb_get_uint8(struct mbdata *, uint8_t *); 123*9c9af259SGordon Ross int mb_get_uint16(struct mbdata *, uint16_t *); 124*9c9af259SGordon Ross int mb_get_uint16le(struct mbdata *, uint16_t *); 125*9c9af259SGordon Ross int mb_get_uint16be(struct mbdata *, uint16_t *); 126*9c9af259SGordon Ross int mb_get_uint32(struct mbdata *, uint32_t *); 127*9c9af259SGordon Ross int mb_get_uint32be(struct mbdata *, uint32_t *); 128*9c9af259SGordon Ross int mb_get_uint32le(struct mbdata *, uint32_t *); 129*9c9af259SGordon Ross int mb_get_uint64(struct mbdata *, uint64_t *); 130*9c9af259SGordon Ross int mb_get_uint64be(struct mbdata *, uint64_t *); 131*9c9af259SGordon Ross int mb_get_uint64le(struct mbdata *, uint64_t *); 132*9c9af259SGordon Ross int mb_get_mem(struct mbdata *, char *, size_t); 133*9c9af259SGordon Ross 134*9c9af259SGordon Ross /* 135*9c9af259SGordon Ross * Network stuff (NetBIOS and otherwise) 136*9c9af259SGordon Ross */ 137*9c9af259SGordon Ross 138*9c9af259SGordon Ross int nb_name_len(struct nb_name *); 139*9c9af259SGordon Ross /* new flag UCflag. 1=uppercase,0=don't */ 140*9c9af259SGordon Ross int nb_name_encode(struct nb_name *, uchar_t *); 141*9c9af259SGordon Ross int nb_encname_len(const uchar_t *); 142*9c9af259SGordon Ross 143*9c9af259SGordon Ross int nb_snballoc(int namelen, struct sockaddr_nb **); 144*9c9af259SGordon Ross void nb_snbfree(struct sockaddr *); 145*9c9af259SGordon Ross int nb_sockaddr(struct sockaddr *, struct nb_name *, struct sockaddr_nb **); 146*9c9af259SGordon Ross 147*9c9af259SGordon Ross int nbns_resolvename(const char *, struct nb_ctx *, struct sockaddr **); 148*9c9af259SGordon Ross int nbns_getnodestatus(struct sockaddr *targethost, 149*9c9af259SGordon Ross struct nb_ctx *ctx, char *system, char *workgroup); 150*9c9af259SGordon Ross int nb_getlocalname(char *name, size_t maxlen); 151*9c9af259SGordon Ross 152*9c9af259SGordon Ross extern uchar_t nls_lower[256], nls_upper[256]; 153*9c9af259SGordon Ross 154*9c9af259SGordon Ross #endif /* _PRIVATE_H */ 155