Drizzled Public API Documentation

ipv6.cc
1 /*
2  Original copyright header listed below. This comes via rsync.
3  Any additional changes are provided via the same license as the original.
4 
5  Copyright (C) 2011 Muhammad Umair
6 
7 */
8 /*
9  * Copyright (C) 1996-2001 Internet Software Consortium.
10  *
11  * Permission to use, copy, modify, and distribute this software for any
12  * purpose with or without fee is hereby granted, provided that the above
13  * copyright notice and this permission notice appear in all copies.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
16  * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
18  * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
19  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
20  * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
21  * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
22  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23  */
24 
25 
26 #include "config.h"
27 
28 #include <algorithm>
29 
30 #include <drizzled/field/ipv6.h>
31 
32 #include <drizzled/error.h>
33 #include <drizzled/internal/my_sys.h>
34 #include <drizzled/session.h>
35 #include <drizzled/table.h>
36 
37 namespace drizzled
38 {
39 namespace field
40 {
41 
42 IPv6::IPv6(unsigned char *ptr_arg,
43  uint32_t len_arg,
44  unsigned char *null_ptr_arg,
45  unsigned char null_bit_arg,
46  const char *field_name_arg) :
47  Field(ptr_arg, len_arg,
48  null_ptr_arg,
49  null_bit_arg,
50  Field::NONE,
51  field_name_arg)
52 {
53 }
54 
55 int IPv6::cmp(const unsigned char *a, const unsigned char *b)
56 {
57  return memcmp(a, b, max_string_length());
58 }
59 
60 int IPv6::store(const char *from, uint32_t, const charset_info_st * const )
61 {
62  ASSERT_COLUMN_MARKED_FOR_WRITE;
63  type::IPv6 ptr_address;
64 
65  if (not ptr_address.inet_pton(from))
66  {
67  my_error(ER_INVALID_IPV6_VALUE, MYF(ME_FATALERROR));
68  return 1;
69  }
70 
71  ptr_address.store_object(ptr);
72 
73  return 0;
74 }
75 
76 int IPv6::store(int64_t , bool )
77 {
78  ASSERT_COLUMN_MARKED_FOR_WRITE;
79  my_error(ER_INVALID_IPV6_VALUE, MYF(ME_FATALERROR));
80  return 1;
81 }
82 
83 int IPv6::store_decimal(const drizzled::type::Decimal*)
84 {
85  ASSERT_COLUMN_MARKED_FOR_WRITE;
86  my_error(ER_INVALID_IPV6_VALUE, MYF(ME_FATALERROR));
87  return 1;
88 }
89 
90 void IPv6::sql_type(String &res) const
91 {
92  res.set_ascii(STRING_WITH_LEN("ipv6"));
93 }
94 
95 double IPv6::val_real() const
96 {
97  ASSERT_COLUMN_MARKED_FOR_READ;
98  my_error(ER_INVALID_IPV6_VALUE, MYF(ME_FATALERROR));
99  return 0;
100 }
101 
102 int64_t IPv6::val_int() const
103 {
104  ASSERT_COLUMN_MARKED_FOR_READ;
105  my_error(ER_INVALID_IPV6_VALUE, MYF(ME_FATALERROR));
106  return 0;
107 }
108 
109 String *IPv6::val_str(String *val_buffer, String *) const
110 {
111  const charset_info_st * const cs= &my_charset_bin;
112  uint32_t mlength= (type::IPv6::IPV6_BUFFER_LENGTH) * cs->mbmaxlen;
113  type::IPv6 ptr_address;
114 
115  val_buffer->alloc(mlength);
116  char *buffer=(char*) val_buffer->ptr();
117 
118  ASSERT_COLUMN_MARKED_FOR_READ;
119 
120  ptr_address.restore_object(ptr);
121  ptr_address.inet_ntop(buffer);
122 
123  val_buffer->length(type::IPv6::IPV6_DISPLAY_LENGTH);
124 
125  return val_buffer;
126 }
127 
128 void IPv6::sort_string(unsigned char *to, uint32_t length_arg)
129 {
130  assert(length_arg == type::IPv6::LENGTH);
131  memcpy(to, ptr, length_arg);
132 }
133 
134 } /* namespace field */
135 } /* namespace drizzled */
136