diff --git a/src/smsutil.c b/src/smsutil.c index ad38ed98..1eb4e3c8 100644 --- a/src/smsutil.c +++ b/src/smsutil.c @@ -110,6 +110,17 @@ static inline int to_semi_oct(char in) return digit; } +void encode_bcd_number(const char *number, unsigned char *out) +{ + while (number[0] != '\0' && number[1] != '\0') { + *out = to_semi_oct(*number++); + *out++ |= to_semi_oct(*number++) << 4; + } + + if (*number) + *out = to_semi_oct(*number) | 0xf0; +} + /* Returns whether the DCS could be parsed successfully, e.g. no reserved * values were used */ diff --git a/src/smsutil.h b/src/smsutil.h index d362aa98..4a392665 100644 --- a/src/smsutil.h +++ b/src/smsutil.h @@ -401,6 +401,7 @@ static inline unsigned char bit_field(unsigned char oct, int start, int num) } void extract_bcd_number(const unsigned char *buf, int len, char *out); +void encode_bcd_number(const char *number, unsigned char *out); gboolean sms_decode(const unsigned char *pdu, int len, gboolean outgoing, int tpdu_len, struct sms *out);