#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void replace_callID ( char* msg, char* newVal);
main()
{
char msg[100];
strcpy(msg
, "test\r\nCall-Id: 1234\r\ntest"); replace_callID (msg, "1112458254");
}
void strupr(char *string)
{
while(*string)
{
if ( *string >= 'a' && *string <= 'z' )
{
*string = *string - 32;
}
string++;
}
}
void replace_callID ( char* msg, char* newVal)
{
// assuming that the msg will allow to hold the bigger buffer if the newVal is greater than the existing Call-ID value
const char* callIdToken = "CALL-ID: ";
char *upper = strdup(msg);
strupr(upper);
char *callId
= strstr(upper
, callIdToken
); // find the CALL-ID (using the UPPER CASE message to find a case insensitive string)
if(callId)
{
char *callIdEol
= strstr(callId
, "\r\n"); if(callIdEol)
{
// store the remaining part of the message in a variable
char *theRest = strdup(msg + (callIdEol - upper));
// terminate the msg string straight after the Call-ID
msg
[(callId
- upper
) + strlen(callIdToken
)] = 0; // append new value
//append the remaining message
// free memory
}
}
// free memory
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKdm9pZCByZXBsYWNlX2NhbGxJRCAoIGNoYXIqIG1zZywgIGNoYXIqIG5ld1ZhbCk7Cm1haW4oKQp7CiAgICBjaGFyIG1zZ1sxMDBdOwogICAgc3RyY3B5KG1zZywgInRlc3RcclxuQ2FsbC1JZDogMTIzNFxyXG50ZXN0Iik7CiAgICByZXBsYWNlX2NhbGxJRCAobXNnLCAgIjExMTI0NTgyNTQiKTsKICAgIHB1dHMobXNnKTsKfQoKdm9pZCBzdHJ1cHIoY2hhciAqc3RyaW5nKQp7CiAgIHdoaWxlKCpzdHJpbmcpCiAgIHsKICAgICAgIGlmICggKnN0cmluZyA+PSAnYScgJiYgKnN0cmluZyA8PSAneicgKQogICAgICAgewogICAgICAgICAgKnN0cmluZyA9ICpzdHJpbmcgLSAzMjsKICAgICAgIH0KICAgICAgIHN0cmluZysrOwogICB9Cn0KCnZvaWQgcmVwbGFjZV9jYWxsSUQgKCBjaGFyKiBtc2csICBjaGFyKiBuZXdWYWwpCnsKICAgIC8vIGFzc3VtaW5nIHRoYXQgdGhlIG1zZyB3aWxsIGFsbG93IHRvIGhvbGQgdGhlIGJpZ2dlciBidWZmZXIgaWYgdGhlIG5ld1ZhbCBpcyBncmVhdGVyIHRoYW4gdGhlIGV4aXN0aW5nIENhbGwtSUQgdmFsdWUKICAgIGNvbnN0IGNoYXIqIGNhbGxJZFRva2VuID0gIkNBTEwtSUQ6ICI7CiAgICBjaGFyICp1cHBlciA9IHN0cmR1cChtc2cpOwogICAgc3RydXByKHVwcGVyKTsKICAgIGNoYXIgKmNhbGxJZCA9IHN0cnN0cih1cHBlciwgY2FsbElkVG9rZW4pOwogICAgLy8gZmluZCB0aGUgQ0FMTC1JRCAodXNpbmcgdGhlIFVQUEVSIENBU0UgbWVzc2FnZSB0byBmaW5kIGEgY2FzZSBpbnNlbnNpdGl2ZSBzdHJpbmcpCiAgICBpZihjYWxsSWQpCiAgICB7CiAgICAgICAgCiAgICAgICAgY2hhciAqY2FsbElkRW9sID0gc3Ryc3RyKGNhbGxJZCwgIlxyXG4iKTsKICAgICAgICBpZihjYWxsSWRFb2wpCiAgICAgICAgewogICAgICAgICAgICAvLyBzdG9yZSB0aGUgcmVtYWluaW5nIHBhcnQgb2YgdGhlIG1lc3NhZ2UgaW4gYSB2YXJpYWJsZQogICAgICAgICAgICBjaGFyICp0aGVSZXN0ID0gc3RyZHVwKG1zZyArIChjYWxsSWRFb2wgLSB1cHBlcikpOwogICAgICAgICAgICAvLyB0ZXJtaW5hdGUgdGhlIG1zZyBzdHJpbmcgc3RyYWlnaHQgYWZ0ZXIgdGhlIENhbGwtSUQKICAgICAgICAgICAgbXNnWyhjYWxsSWQgLSB1cHBlcikgKyBzdHJsZW4oY2FsbElkVG9rZW4pXSA9IDA7CiAgICAgICAgICAgIC8vIGFwcGVuZCBuZXcgdmFsdWUKICAgICAgICAgICAgc3RyY2F0KG1zZywgbmV3VmFsKTsKICAgICAgICAgICAgLy9hcHBlbmQgdGhlIHJlbWFpbmluZyBtZXNzYWdlCiAgICAgICAgICAgIHN0cmNhdChtc2csIHRoZVJlc3QpOwogICAgICAgICAgICAvLyBmcmVlIG1lbW9yeQogICAgICAgICAgICBmcmVlKHRoZVJlc3QpOwogICAgICAgIH0KICAgIH0KICAgIC8vIGZyZWUgbWVtb3J5CiAgICBmcmVlKHVwcGVyKTsKfQo=