otp-parse.c revision d19412e30b27e413f99cbedab86c9f9396741638
33c6d5807b449463e9b81db5ec99fe027cc1b984Timo Sirainen * OTP extended response parser.
33c6d5807b449463e9b81db5ec99fe027cc1b984Timo Sirainen * Copyright (c) 2006 Andrey Panin <pazke@donpac.ru>
e074ffeaee1ce283bd42f167c6810e3d013f8218Timo Sirainen * This software is released under the MIT license.
33c6d5807b449463e9b81db5ec99fe027cc1b984Timo Sirainenstatic inline const char *otp_skip_lws(const char *data)
73bfdbe28c2ce6d143eadf0bab8ccfbe4cab0faeTimo Sirainenstatic inline int otp_check_tail(const char *data)
78ed6a99e980228a75fa59cff84327dc0ea82857Timo Sirainen return *data != 0;
462b8c71015b2483cff3c59fa3668246dc72dfceAndrey Paninint otp_read_hex(const char *data, const char **endptr, unsigned char *hash)
33c6d5807b449463e9b81db5ec99fe027cc1b984Timo Sirainen unsigned int i = 0;
33c6d5807b449463e9b81db5ec99fe027cc1b984Timo Sirainen buffer_create_from_data(&buf, hash, OTP_HASH_SIZE);
73bfdbe28c2ce6d143eadf0bab8ccfbe4cab0faeTimo Sirainen } else if (!IS_LWS(c)) {
33c6d5807b449463e9b81db5ec99fe027cc1b984Timo Sirainen#define add_word() do { \
char c = *data;
if (space) {
if (IS_LWS(c))
else if (i_isalpha(c)) {
if (i_isalpha(c)) {
count = 0;
} else if (IS_LWS(c)) {
add_word();
add_word();
if (endptr)
char *end;
int algo;
s = p = data;
while ((*p != 0) && !IS_LWS(*p)) p++;
if (algo < 0)
if ((p == s) || !IS_LWS(*p))
*endptr = p;
const char *end;
if (ret < 0)
return ret;
const char *end;
if (ret < 0) {
return ret;
if (ret < 0) {
if (ret < 0) {
const char *end;
int ret;
if (ret != 0)
return ret;