~drizzle-trunk/drizzle/development

390.1.4 by Monty Taylor
More copyright header file fixes.
1
/* - mode: c; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
 *
4
 *  Copyright (C) 2008 Sun Microsystems, Inc.
5
 *
6
 *  This program is free software; you can redistribute it and/or modify
7
 *  it under the terms of the GNU General Public License as published by
8
 *  the Free Software Foundation; version 2 of the License.
9
 *
10
 *  This program is distributed in the hope that it will be useful,
11
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 *  GNU General Public License for more details.
14
 *
15
 *  You should have received a copy of the GNU General Public License
16
 *  along with this program; if not, write to the Free Software
17
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
 */
1 by brian
clean slate
19
779.3.37 by Monty Taylor
Renmaed libdrizzle in the tree to libdrizzleclient to avoid namespace clashes
20
#include "libdrizzle_priv.h"
21
#include "pack.h"
22
390.1.6 by Monty Taylor
Oh dear god the changes. The changes. I'd tell you what they are, but I'd just be making stuff up. Suffice it to day it's mostly all around splitting files in libdrizzle into different files and removing interdepends. And whatever else I happened to see...
23
#include <stdint.h>
1 by brian
clean slate
24
25
/* Get the length of next field. Change parameter to point at fieldstart */
840.1.20 by Monty Taylor
Renamed non-prefixed things from libdrizzleclient to drizzleclient.
26
uint32_t drizzleclient_net_field_length(unsigned char **packet)
1 by brian
clean slate
27
{
390.1.6 by Monty Taylor
Oh dear god the changes. The changes. I'd tell you what they are, but I'd just be making stuff up. Suffice it to day it's mostly all around splitting files in libdrizzle into different files and removing interdepends. And whatever else I happened to see...
28
  register unsigned char *pos= (unsigned char *)*packet;
1 by brian
clean slate
29
  if (*pos < 251)
30
  {
31
    (*packet)++;
294 by Brian Aker
libdrizzle has ulong removed.
32
    return (uint32_t) *pos;
1 by brian
clean slate
33
  }
34
  if (*pos == 251)
35
  {
36
    (*packet)++;
37
    return NULL_LENGTH;
38
  }
39
  if (*pos == 252)
40
  {
41
    (*packet)+=3;
294 by Brian Aker
libdrizzle has ulong removed.
42
    return (uint32_t) uint2korr(pos+1);
1 by brian
clean slate
43
  }
44
  if (*pos == 253)
45
  {
46
    (*packet)+=4;
294 by Brian Aker
libdrizzle has ulong removed.
47
    return (uint32_t) uint3korr(pos+1);
1 by brian
clean slate
48
  }
206.3.1 by Patrick Galbraith
Most everything working with client rename
49
  (*packet)+=9;          /* Must be 254 when here */
294 by Brian Aker
libdrizzle has ulong removed.
50
  return (uint32_t) uint4korr(pos+1);
1 by brian
clean slate
51
}
52
152 by Brian Aker
longlong replacement
53
/* The same as above but returns int64_t */
840.1.20 by Monty Taylor
Renamed non-prefixed things from libdrizzleclient to drizzleclient.
54
uint64_t drizzleclient_drizzleclient_net_field_length_ll(unsigned char **packet)
1 by brian
clean slate
55
{
390.1.6 by Monty Taylor
Oh dear god the changes. The changes. I'd tell you what they are, but I'd just be making stuff up. Suffice it to day it's mostly all around splitting files in libdrizzle into different files and removing interdepends. And whatever else I happened to see...
56
  register unsigned char *pos= *packet;
1 by brian
clean slate
57
  if (*pos < 251)
58
  {
59
    (*packet)++;
155 by Brian Aker
Removing a few "additional" ways of saying uint64_t
60
    return (uint64_t) *pos;
1 by brian
clean slate
61
  }
62
  if (*pos == 251)
63
  {
64
    (*packet)++;
155 by Brian Aker
Removing a few "additional" ways of saying uint64_t
65
    return (uint64_t) NULL_LENGTH;
1 by brian
clean slate
66
  }
67
  if (*pos == 252)
68
  {
69
    (*packet)+=3;
155 by Brian Aker
Removing a few "additional" ways of saying uint64_t
70
    return (uint64_t) uint2korr(pos+1);
1 by brian
clean slate
71
  }
72
  if (*pos == 253)
73
  {
74
    (*packet)+=4;
155 by Brian Aker
Removing a few "additional" ways of saying uint64_t
75
    return (uint64_t) uint3korr(pos+1);
1 by brian
clean slate
76
  }
206.3.1 by Patrick Galbraith
Most everything working with client rename
77
  (*packet)+=9;          /* Must be 254 when here */
1 by brian
clean slate
78
#ifdef NO_CLIENT_LONGLONG
155 by Brian Aker
Removing a few "additional" ways of saying uint64_t
79
  return (uint64_t) uint4korr(pos+1);
1 by brian
clean slate
80
#else
155 by Brian Aker
Removing a few "additional" ways of saying uint64_t
81
  return (uint64_t) uint8korr(pos+1);
1 by brian
clean slate
82
#endif
83
}
84
85
/*
86
  Store an integer with simple packing into a output package
87
88
  SYNOPSIS
840.1.20 by Monty Taylor
Renamed non-prefixed things from libdrizzleclient to drizzleclient.
89
    drizzleclient_net_store_length()
206.3.1 by Patrick Galbraith
Most everything working with client rename
90
    pkg      Store the packed integer here
91
    length    integers to store
1 by brian
clean slate
92
93
  NOTES
94
    This is mostly used to store lengths of strings.
95
    We have to cast the result for the LL() becasue of a bug in Forte CC
96
    compiler.
97
98
  RETURN
99
   Position in 'pkg' after the packed length
100
*/
101
840.1.20 by Monty Taylor
Renamed non-prefixed things from libdrizzleclient to drizzleclient.
102
unsigned char *drizzleclient_net_store_length(unsigned char *packet, uint64_t length)
1 by brian
clean slate
103
{
151 by Brian Aker
Ulonglong to uint64_t
104
  if (length < (uint64_t) 251LL)
1 by brian
clean slate
105
  {
390.1.6 by Monty Taylor
Oh dear god the changes. The changes. I'd tell you what they are, but I'd just be making stuff up. Suffice it to day it's mostly all around splitting files in libdrizzle into different files and removing interdepends. And whatever else I happened to see...
106
    *packet=(unsigned char) length;
1 by brian
clean slate
107
    return packet+1;
108
  }
109
  /* 251 is reserved for NULL */
151 by Brian Aker
Ulonglong to uint64_t
110
  if (length < (uint64_t) 65536LL)
1 by brian
clean slate
111
  {
112
    *packet++=252;
395 by Brian Aker
Fixed uint/ushort issue in libdrizzle
113
    int2store(packet,(uint32_t) length);
1 by brian
clean slate
114
    return packet+2;
115
  }
151 by Brian Aker
Ulonglong to uint64_t
116
  if (length < (uint64_t) 16777216LL)
1 by brian
clean slate
117
  {
118
    *packet++=253;
294 by Brian Aker
libdrizzle has ulong removed.
119
    int3store(packet,(uint32_t) length);
1 by brian
clean slate
120
    return packet+3;
121
  }
122
  *packet++=254;
123
  int8store(packet,length);
124
  return packet+8;
125
}
126