~ubuntu-branches/ubuntu/raring/freerdp/raring

« back to all changes in this revision

Viewing changes to asn1/OBJECT_IDENTIFIER.h

  • Committer: Bazaar Package Importer
  • Author(s): Otavio Salvador
  • Date: 2010-06-23 21:39:09 UTC
  • Revision ID: james.westby@ubuntu.com-20100623213909-bb9pvvv03913tdv6
Tags: upstream-0.7.1
ImportĀ upstreamĀ versionĀ 0.7.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*-
 
2
 * Copyright (c) 2003, 2004, 2005 Lev Walkin <vlm@lionet.info>.
 
3
 *      All rights reserved.
 
4
 * Redistribution and modifications are permitted subject to BSD license.
 
5
 */
 
6
#ifndef _OBJECT_IDENTIFIER_H_
 
7
#define _OBJECT_IDENTIFIER_H_
 
8
 
 
9
#include <asn_application.h>
 
10
#include <asn_codecs_prim.h>
 
11
 
 
12
#ifdef __cplusplus
 
13
extern "C" {
 
14
#endif
 
15
 
 
16
typedef ASN__PRIMITIVE_TYPE_t OBJECT_IDENTIFIER_t;
 
17
 
 
18
extern asn_TYPE_descriptor_t asn_DEF_OBJECT_IDENTIFIER;
 
19
 
 
20
asn_struct_print_f OBJECT_IDENTIFIER_print;
 
21
asn_constr_check_f OBJECT_IDENTIFIER_constraint;
 
22
der_type_encoder_f OBJECT_IDENTIFIER_encode_der;
 
23
xer_type_decoder_f OBJECT_IDENTIFIER_decode_xer;
 
24
xer_type_encoder_f OBJECT_IDENTIFIER_encode_xer;
 
25
 
 
26
/**********************************
 
27
 * Some handy conversion routines *
 
28
 **********************************/
 
29
 
 
30
/*
 
31
 * This function fills an (_arcs) array with OBJECT IDENTIFIER arcs
 
32
 * up to specified (_arc_slots) elements.
 
33
 * 
 
34
 * EXAMPLE:
 
35
 *      void print_arcs(OBJECT_IDENTIFIER_t *oid) {
 
36
 *              unsigned long fixed_arcs[10];   // Try with fixed space first
 
37
 *              unsigned long *arcs = fixed_arcs;
 
38
 *              int arc_type_size = sizeof(fixed_arcs[0]);      // sizeof(long)
 
39
 *              int arc_slots = sizeof(fixed_arcs)/sizeof(fixed_arcs[0]); // 10
 
40
 *              int count;      // Real number of arcs.
 
41
 *              int i;
 
42
 * 
 
43
 *              count = OBJECT_IDENTIFIER_get_arcs(oid, arcs,
 
44
 *                      arc_type_size, arc_slots);
 
45
 *              // If necessary, reallocate arcs array and try again.
 
46
 *              if(count > arc_slots) {
 
47
 *                      arc_slots = count;
 
48
 *                      arcs = malloc(arc_type_size * arc_slots);
 
49
 *                      if(!arcs) return;
 
50
 *                      count = OBJECT_IDENTIFIER_get_arcs(oid, arcs,
 
51
 *                              arc_type_size, arc_slots);
 
52
 *                      assert(count == arc_slots);
 
53
 *              }
 
54
 * 
 
55
 *              // Print the contents of the arcs array.
 
56
 *              for(i = 0; i < count; i++)
 
57
 *                      printf("%d\n", arcs[i]);
 
58
 * 
 
59
 *              // Avoid memory leak.
 
60
 *              if(arcs != fixed_arcs) free(arcs);
 
61
 *      }
 
62
 * 
 
63
 * RETURN VALUES:
 
64
 * -1/EINVAL:   Invalid arguments (oid is missing)
 
65
 * -1/ERANGE:   One or more arcs have value out of array cell type range.
 
66
 * >=0:         Number of arcs contained in the OBJECT IDENTIFIER
 
67
 * 
 
68
 * WARNING: The function always returns the real number of arcs,
 
69
 * even if there is no sufficient (_arc_slots) provided.
 
70
 */
 
71
int OBJECT_IDENTIFIER_get_arcs(OBJECT_IDENTIFIER_t *_oid,
 
72
        void *_arcs,                    /* e.g., unsigned int arcs[N] */
 
73
        unsigned int _arc_type_size,    /* e.g., sizeof(arcs[0]) */
 
74
        unsigned int _arc_slots         /* e.g., N */);
 
75
 
 
76
/*
 
77
 * This functions initializes the OBJECT IDENTIFIER object with
 
78
 * the given set of arcs.
 
79
 * The minimum of two arcs must be present; some restrictions apply.
 
80
 * RETURN VALUES:
 
81
 * -1/EINVAL:   Invalid arguments
 
82
 * -1/ERANGE:   The first two arcs do not conform to ASN.1 restrictions.
 
83
 * -1/ENOMEM:   Memory allocation failed
 
84
 * 0:           The object was initialized with new arcs.
 
85
 */
 
86
int OBJECT_IDENTIFIER_set_arcs(OBJECT_IDENTIFIER_t *_oid,
 
87
        const void *_arcs,              /* e.g., unsigned int arcs[N] */
 
88
        unsigned int _arc_type_size,    /* e.g., sizeof(arcs[0]) */
 
89
        unsigned int _arc_slots         /* e.g., N */);
 
90
 
 
91
/*
 
92
 * Print the specified OBJECT IDENTIFIER arc.
 
93
 */
 
94
int OBJECT_IDENTIFIER_print_arc(uint8_t *arcbuf, int arclen,
 
95
        int add, /* Arbitrary offset, required to process the first two arcs */
 
96
        asn_app_consume_bytes_f *cb, void *app_key);
 
97
 
 
98
/* Same as above, but returns the number of written digits, instead of 0 */
 
99
ssize_t OBJECT_IDENTIFIER__dump_arc(uint8_t *arcbuf, int arclen, int add,
 
100
        asn_app_consume_bytes_f *cb, void *app_key);
 
101
 
 
102
/*
 
103
 * Parse the OBJECT IDENTIFIER textual representation ("1.3.6.1.4.1.9363").
 
104
 * No arc can exceed the (0..signed_long_max) range (typically, 0..2G if L32).
 
105
 * This function is not specific to OBJECT IDENTIFIER, it may be used to parse
 
106
 * the RELATIVE-OID data, or any other data consisting of dot-separated
 
107
 * series of numeric values.
 
108
 *
 
109
 * If (oid_txt_length == -1), the strlen() will be invoked to determine the
 
110
 * size of the (oid_text) string.
 
111
 * 
 
112
 * After return, the optional (opt_oid_text_end) is set to the character after
 
113
 * the last parsed one. (opt_oid_text_end) is never less than (oid_text).
 
114
 * 
 
115
 * RETURN VALUES:
 
116
 *   -1:        Parse error.
 
117
 * >= 0:        Number of arcs contained in the OBJECT IDENTIFIER.
 
118
 * 
 
119
 * WARNING: The function always returns the real number of arcs,
 
120
 * even if there is no sufficient (_arc_slots) provided.
 
121
 * This is useful for (_arc_slots) value estimation.
 
122
 */
 
123
int OBJECT_IDENTIFIER_parse_arcs(const char *oid_text, ssize_t oid_txt_length,
 
124
        long arcs[], unsigned int arcs_slots, const char **opt_oid_text_end);
 
125
 
 
126
/*
 
127
 * Internal functions.
 
128
 * Used by RELATIVE-OID implementation in particular.
 
129
 */
 
130
int OBJECT_IDENTIFIER_get_single_arc(uint8_t *arcbuf, unsigned int arclen,
 
131
        signed int add, void *value, unsigned int value_size);
 
132
int OBJECT_IDENTIFIER_set_single_arc(uint8_t *arcbuf,
 
133
        const void *arcval, unsigned int arcval_size, int _prepared_order);
 
134
 
 
135
#ifdef __cplusplus
 
136
}
 
137
#endif
 
138
 
 
139
#endif  /* _OBJECT_IDENTIFIER_H_ */