| /** |
| * Copyright (C) 2013 Regents of the University of California. |
| * @author: Jeff Thompson <jefft0@remap.ucla.edu> |
| * See COPYING for copyright and distribution information. |
| */ |
| |
| #include <string.h> |
| #include "util/ndn_memory.h" |
| #include "name.h" |
| |
| uint64_t ndn_NameComponent_toNumber(struct ndn_NameComponent *self) |
| { |
| uint64_t result = 0; |
| size_t i; |
| for (i = 0; i < self->value.length; ++i) { |
| result *= 256; |
| result += (uint64_t)self->value.value[i]; |
| } |
| |
| return result; |
| } |
| |
| ndn_Error ndn_NameComponent_toNumberWithMarker(struct ndn_NameComponent *self, uint8_t marker, uint64_t *result) |
| { |
| if (self->value.length == 0 || self->value.value[0] != marker) |
| return NDN_ERROR_Name_component_does_not_begin_with_the_expected_marker; |
| |
| uint64_t localResult = 0; |
| size_t i; |
| for (i = 1; i < self->value.length; ++i) { |
| localResult *= 256; |
| localResult += (uint64_t)self->value.value[i]; |
| } |
| |
| *result = localResult; |
| return NDN_ERROR_success; |
| } |
| |
| int ndn_Name_match(struct ndn_Name *self, struct ndn_Name *name) |
| { |
| // This name is longer than the name we are checking it against. |
| if (self->nComponents > name->nComponents) |
| return 0; |
| |
| // Check if at least one of given components doesn't match. |
| size_t i; |
| for (i = 0; i < self->nComponents; ++i) { |
| struct ndn_NameComponent *selfComponent = self->components + i; |
| struct ndn_NameComponent *nameComponent = name->components + i; |
| |
| if (selfComponent->value.length != nameComponent->value.length || |
| ndn_memcmp(selfComponent->value.value, nameComponent->value.value, selfComponent->value.length) != 0) |
| return 0; |
| } |
| |
| return 1; |
| } |
| |
| ndn_Error ndn_Name_appendComponent(struct ndn_Name *self, uint8_t* value, size_t valueLength) |
| { |
| if (self->nComponents >= self->maxComponents) |
| return NDN_ERROR_attempt_to_add_a_component_past_the_maximum_number_of_components_allowed_in_the_name; |
| ndn_NameComponent_initialize(self->components + self->nComponents, value, valueLength); |
| ++self->nComponents; |
| |
| return NDN_ERROR_success; |
| } |
| |
| ndn_Error ndn_Name_appendString(struct ndn_Name *self, char* value) |
| { |
| return ndn_Name_appendComponent(self, (uint8_t*)value, strlen(value)); |
| } |