VirtualBox

source: vbox/trunk/src/VBox/NetworkServices/Dhcpd/ClientId.cpp@ 78271

Last change on this file since 78271 was 76553, checked in by vboxsync, 6 years ago

scm --update-copyright-year

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.9 KB
Line 
1/* $Id: ClientId.cpp 76553 2019-01-01 01:45:53Z vboxsync $ */
2/** @file
3 * DHCP server - client identifier
4 */
5
6/*
7 * Copyright (C) 2017-2019 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#include <algorithm>
19
20#include "ClientId.h"
21
22
23bool ClientId::g_fFormatRegistered = false;
24
25
26void ClientId::registerFormat()
27{
28 if (g_fFormatRegistered)
29 return;
30
31 int rc = RTStrFormatTypeRegister("id", rtStrFormat, NULL);
32 AssertRC(rc);
33
34 g_fFormatRegistered = true;
35}
36
37
38DECLCALLBACK(size_t)
39ClientId::rtStrFormat(PFNRTSTROUTPUT pfnOutput, void *pvArgOutput,
40 const char *pszType, void const *pvValue,
41 int cchWidth, int cchPrecision, unsigned fFlags,
42 void *pvUser)
43{
44 const ClientId *id = static_cast<const ClientId *>(pvValue);
45 size_t cb = 0;
46
47 AssertReturn(strcmp(pszType, "id") == 0, 0);
48 RT_NOREF(pszType);
49
50 RT_NOREF(cchWidth, cchPrecision, fFlags);
51 RT_NOREF(pvUser);
52
53 if (id == NULL)
54 {
55 return RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
56 "<NULL>");
57 }
58
59 if (id->m_id.present())
60 {
61 const OptClientId::value_t &idopt = id->m_id.value();
62
63 cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
64 "[");
65
66 for (size_t i = 0; i < idopt.size(); ++i)
67 {
68 cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
69 "%s%02x", (i == 0 ? "" : ":"), idopt[i]);
70 }
71
72 cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
73 "] (");
74 }
75
76 cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
77 "%RTmac", &id->m_mac);
78
79 if (id->m_id.present())
80 {
81 cb += RTStrFormat(pfnOutput, pvArgOutput, NULL, 0,
82 ")");
83 }
84
85 return 0;
86}
87
88
89bool operator==(const ClientId &l, const ClientId &r)
90{
91 if (l.m_id.present())
92 {
93 if (r.m_id.present())
94 return l.m_id.value() == r.m_id.value();
95 }
96 else
97 {
98 if (!r.m_id.present())
99 return l.m_mac == r.m_mac;
100 }
101
102 return false;
103}
104
105
106bool operator<(const ClientId &l, const ClientId &r)
107{
108 if (l.m_id.present())
109 {
110 if (r.m_id.present())
111 return l.m_id.value() < r.m_id.value();
112 else
113 return false; /* the one with id comes last */
114 }
115 else
116 {
117 if (r.m_id.present())
118 return true; /* the one with id comes last */
119 else
120 return l.m_mac < r.m_mac;
121 }
122}
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette