summaryrefslogtreecommitdiffstats
path: root/rubbos/app/tomcat-connectors-1.2.32-src/native/common/jk_msg_buff.h
blob: 3fdc006b3a018e1daafc454d4e3b2f21d0c315a8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/*
 *  Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

/***************************************************************************
 * Description: Data marshaling. XDR like                                  *
 * Author:      Costin <costin@costin.dnt.ro>                              *
 * Author:      Gal Shachor <shachor@il.ibm.com>                           *
 * Version:     $Revision: 530674 $                                           *
 ***************************************************************************/

#ifndef JK_MSG_BUF_H
#define JK_MSG_BUF_H


#ifdef __cplusplus
extern "C"
{
#endif                          /* __cplusplus */

#define DEF_BUFFER_SZ (8 * 1024)

/* XXX replace all return values with error codes */
#define ERR_BAD_PACKET -5

/*
RPC details:

  - one parameter  - use a structure for more. The method
    is encoded as part of the request
  - one or no result
  -



 */

typedef struct jk_msg_buf_t jk_msg_buf_t;
struct jk_msg_buf_t
{
    jk_pool_t *pool;
    unsigned char *buf;
    int pos;
    int len;
    int maxlen;
};


/* -------------------- Setup routines -------------------- */

/** Allocate a buffer.
 */
jk_msg_buf_t *jk_b_new(jk_pool_t *p);

/** Set up a buffer with an existing buffer
 */
int jk_b_set_buffer(jk_msg_buf_t *msg, unsigned char *data, int buffSize);

/*
 * Set up a buffer with a new buffer of buffSize
 */
int jk_b_set_buffer_size(jk_msg_buf_t *msg, int buffSize);

/*
 * Finalize the buffer before sending - set length fields, etc
 */
void jk_b_end(jk_msg_buf_t *msg, int protoh);

/*
 * Recycle the buffer - z for a new invocation
 */
void jk_b_reset(jk_msg_buf_t *msg);

/* -------------------- Real encoding -------------------- */

int jk_b_append_byte(jk_msg_buf_t *msg, unsigned char val);

int jk_b_append_bytes(jk_msg_buf_t *msg,
                      const unsigned char *param, int len);

int jk_b_append_int(jk_msg_buf_t *msg, unsigned short val);

int jk_b_append_long(jk_msg_buf_t *msg, unsigned long val);

int jk_b_append_string(jk_msg_buf_t *msg, const char *param);

#if defined(AS400) && !defined(AS400_UTF8)
int jk_b_append_asciistring(jk_msg_buf_t *msg, const char *param);
#endif

int jk_b_append_bytes(jk_msg_buf_t *msg,
                      const unsigned char *param, int len);

/* -------------------- Decoding -------------------- */

/** Get a byte from the current position
 */
unsigned char jk_b_get_byte(jk_msg_buf_t *msg);

/** Get an int from the current position
 */
unsigned short jk_b_get_int(jk_msg_buf_t *msg);

/** Get a long from the current position
 */
unsigned long jk_b_get_long(jk_msg_buf_t *msg);

/** Get a String from the current position
 */
unsigned char *jk_b_get_string(jk_msg_buf_t *msg);

/** Get Bytes from the current position
 */
int jk_b_get_bytes(jk_msg_buf_t *msg, unsigned char *buf, int len);

/** Get a byte from an arbitrary position
 */
unsigned char jk_b_pget_byte(jk_msg_buf_t *msg, int pos);

/** Get an int from an arbitrary position
 */
unsigned short jk_b_pget_int(jk_msg_buf_t *msg, int pos);

/** Get a long from an arbitrary position
 */
unsigned long jk_b_pget_long(jk_msg_buf_t *msg, int pos);

/* --------------------- Help ------------------------ */
void jk_dump_buff(jk_logger_t *l,
                  const char *file,
                  int line, const char *funcname,
                  int level, char *what, jk_msg_buf_t *msg);

/** Copy a msg buf into another one
  */
int jk_b_copy(jk_msg_buf_t *smsg, jk_msg_buf_t *dmsg);

#ifdef __cplusplus
}
#endif    /* __cplusplus */
#endif    /* JK_MSG_BUF_H */