~ubuntu-branches/ubuntu/quantal/freerdp/quantal

« back to all changes in this revision

Viewing changes to asn1/ber_tlv_tag.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 Lev Walkin <vlm@lionet.info>. All rights reserved.
 
3
 * Redistribution and modifications are permitted subject to BSD license.
 
4
 */
 
5
#ifndef _BER_TLV_TAG_H_
 
6
#define _BER_TLV_TAG_H_
 
7
 
 
8
#ifdef __cplusplus
 
9
extern "C" {
 
10
#endif
 
11
 
 
12
enum asn_tag_class {
 
13
        ASN_TAG_CLASS_UNIVERSAL         = 0,    /* 0b00 */
 
14
        ASN_TAG_CLASS_APPLICATION       = 1,    /* 0b01 */
 
15
        ASN_TAG_CLASS_CONTEXT           = 2,    /* 0b10 */
 
16
        ASN_TAG_CLASS_PRIVATE           = 3     /* 0b11 */
 
17
};
 
18
typedef unsigned ber_tlv_tag_t; /* BER TAG from Tag-Length-Value */
 
19
 
 
20
/*
 
21
 * Tag class is encoded together with tag value for optimization purposes.
 
22
 */
 
23
#define BER_TAG_CLASS(tag)      ((tag) & 0x3)
 
24
#define BER_TAG_VALUE(tag)      ((tag) >> 2)
 
25
#define BER_TLV_CONSTRUCTED(tagptr)     (((*(const uint8_t *)tagptr)&0x20)?1:0)
 
26
 
 
27
#define BER_TAGS_EQUAL(tag1, tag2)      ((tag1) == (tag2))
 
28
 
 
29
/*
 
30
 * Several functions for printing the TAG in the canonical form
 
31
 * (i.e. "[PRIVATE 0]").
 
32
 * Return values correspond to their libc counterparts (if any).
 
33
 */
 
34
ssize_t ber_tlv_tag_snprint(ber_tlv_tag_t tag, char *buf, size_t buflen);
 
35
ssize_t ber_tlv_tag_fwrite(ber_tlv_tag_t tag, FILE *);
 
36
char *ber_tlv_tag_string(ber_tlv_tag_t tag);
 
37
 
 
38
 
 
39
/*
 
40
 * This function tries to fetch the tag from the input stream.
 
41
 * RETURN VALUES:
 
42
 *       0:     More data expected than bufptr contains.
 
43
 *      -1:     Fatal error deciphering tag.
 
44
 *      >0:     Number of bytes used from bufptr. tag_r will contain the tag.
 
45
 */
 
46
ssize_t ber_fetch_tag(const void *bufptr, size_t size, ber_tlv_tag_t *tag_r);
 
47
 
 
48
/*
 
49
 * This function serializes the tag (T from TLV) in BER format.
 
50
 * It always returns number of bytes necessary to represent the tag,
 
51
 * it is a caller's responsibility to check the return value
 
52
 * against the supplied buffer's size.
 
53
 */
 
54
size_t ber_tlv_tag_serialize(ber_tlv_tag_t tag, void *bufptr, size_t size);
 
55
 
 
56
#ifdef __cplusplus
 
57
}
 
58
#endif
 
59
 
 
60
#endif  /* _BER_TLV_TAG_H_ */