summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/smsutil.c11
-rw-r--r--src/smsutil.h1
2 files changed, 12 insertions, 0 deletions
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);