]>
Commit | Line | Data |
---|---|---|
b1ab9ed8 | 1 | /* |
d8f41ccd | 2 | * Copyright (c) 2000-2004,2006,2011,2014 Apple Inc. All Rights Reserved. |
b1ab9ed8 A |
3 | * |
4 | * @APPLE_LICENSE_HEADER_START@ | |
5 | * | |
6 | * This file contains Original Code and/or Modifications of Original Code | |
7 | * as defined in and that are subject to the Apple Public Source License | |
8 | * Version 2.0 (the 'License'). You may not use this file except in | |
9 | * compliance with the License. Please obtain a copy of the License at | |
10 | * http://www.opensource.apple.com/apsl/ and read it before using this | |
11 | * file. | |
12 | * | |
13 | * The Original Code and all software distributed under the License are | |
14 | * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER | |
15 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, | |
16 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, | |
17 | * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. | |
18 | * Please see the License for the specific language governing rights and | |
19 | * limitations under the License. | |
20 | * | |
21 | * @APPLE_LICENSE_HEADER_END@ | |
22 | */ | |
23 | ||
24 | ||
25 | // | |
26 | // Manage the Tower of Babel of CSSM dates and times. | |
27 | // | |
28 | #ifndef _H_CSSMDATES | |
29 | #define _H_CSSMDATES | |
30 | ||
31 | #include <security_utilities/utilities.h> | |
32 | #include <security_cdsa_utilities/cssmdata.h> | |
33 | #include <CoreFoundation/CFDate.h> | |
34 | ||
35 | ||
36 | namespace Security { | |
37 | ||
38 | ||
39 | // | |
40 | // A PodWrapper for CSSM_DATE | |
41 | // | |
42 | class CssmDate : public PodWrapper<CssmDate, CSSM_DATE> { | |
43 | public: | |
44 | CssmDate() { } | |
45 | CssmDate(const char *y, const char *m, const char *d); | |
46 | CssmDate(int y, int m, int d); | |
47 | ||
48 | const char *years() const { return reinterpret_cast<const char *>(Year); } | |
49 | const char *months() const { return reinterpret_cast<const char *>(Month); } | |
50 | const char *days() const { return reinterpret_cast<const char *>(Day); } | |
51 | char *years() { return reinterpret_cast<char *>(Year); } | |
52 | char *months() { return reinterpret_cast<char *>(Month); } | |
53 | char *days() { return reinterpret_cast<char *>(Day); } | |
54 | ||
55 | int year() const; | |
56 | int month() const; | |
57 | int day() const; | |
58 | ||
59 | private: | |
60 | static void assign(char *dest, int width, const char *src); | |
61 | }; | |
62 | ||
63 | inline bool operator == (const CSSM_DATE &d1, const CSSM_DATE &d2) | |
64 | { return !memcmp(&d1, &d2, sizeof(d1)); } | |
65 | ||
66 | inline bool operator != (const CSSM_DATE &d1, const CSSM_DATE &d2) | |
67 | { return !memcmp(&d1, &d2, sizeof(d1)); } | |
68 | ||
69 | ||
70 | // | |
71 | // Yet another CSSM date/time format is CSSM_TIMESTRING. This is | |
72 | // defined as "char *", just so you can't use the type system | |
73 | // to keep things sane, so we can't really PodWrap it the usual way. | |
74 | // What *were* they thinking? | |
75 | // The format is allegedly "yyyymmddhhmmss", and the standard says | |
76 | // nothing about trailing null characters. | |
77 | // | |
78 | ||
79 | ||
80 | // | |
81 | // A unified date-and-time object. | |
82 | // This is based on CFDate objects and converts to various CSSM | |
83 | // inspired formats. | |
84 | // | |
85 | class CssmUniformDate { | |
86 | public: | |
87 | CssmUniformDate() { } | |
88 | ||
89 | // convert to/from CFDateRef | |
90 | CssmUniformDate(CFDateRef ref); | |
91 | operator CFDateRef() const; | |
92 | ||
93 | // convert to/from CFAbsoluteTime | |
94 | CssmUniformDate(CFAbsoluteTime ct) : mTime(ct) { } | |
95 | operator CFAbsoluteTime() const { return mTime; } | |
96 | ||
97 | // convert to/from CSSM_DATE | |
98 | CssmUniformDate(const CssmDate &src); | |
99 | operator CssmDate () const; | |
100 | ||
101 | // convert to/from DATA format (1999-06-30_15:05:39 form) | |
102 | CssmUniformDate(const CSSM_DATA &src); | |
103 | void convertTo(CssmOwnedData &data) const; | |
104 | ||
105 | // convert to/from CSSM_TIMESTRING format (19990630150539) | |
106 | CssmUniformDate(const char *src); | |
107 | void convertTo(char *dest, size_t length) const; | |
108 | ||
109 | // native comparisons | |
110 | bool operator < (const CssmUniformDate &other) const { return mTime < other.mTime; } | |
111 | bool operator == (const CssmUniformDate &other) const { return mTime == other.mTime; } | |
112 | bool operator > (const CssmUniformDate &other) const { return mTime > other.mTime; } | |
113 | bool operator <= (const CssmUniformDate &other) const { return mTime <= other.mTime; } | |
114 | bool operator >= (const CssmUniformDate &other) const { return mTime >= other.mTime; } | |
115 | bool operator != (const CssmUniformDate &other) const { return mTime != other.mTime; } | |
116 | ||
117 | private: | |
118 | void setFromString(const char *src, const char *format, size_t fieldLength); | |
119 | ||
120 | private: | |
121 | CFAbsoluteTime mTime; | |
122 | }; | |
123 | ||
124 | ||
125 | } // end namespace Security | |
126 | ||
127 | #endif //_H_CSSMDATES |