Index: gw/smsbox.c
===================================================================
RCS file: /home/cvs/gateway/gw/smsbox.c,v
retrieving revision 1.199
diff -u -r1.199 smsbox.c
--- gw/smsbox.c	29 May 2002 12:27:21 -0000	1.199
+++ gw/smsbox.c	31 May 2002 16:06:23 -0000
@@ -291,7 +291,8 @@
 				      int *coding, int *compress, 
 				      int *validity, int *deferred, 
 				      int *dlr_mask, Octstr **dlr_url, 
-				      Octstr **account, int *pid, int *alt_dcs)
+				      Octstr **account, int *pid, int *alt_dcs, 
+				      Octstr **service)
 {
     Octstr *name, *val;
     long l;
@@ -376,6 +377,12 @@
 	else if (octstr_case_compare(name, octstr_imm("X-Kannel-DLR-Mask")) == 0) {
     	    sscanf(octstr_get_cstr(val),"%d", dlr_mask);
 	}
+	else if (octstr_case_compare(name, octstr_imm("X-Kannel-Service")) == 0) {
+	    if (service != NULL) {
+		*service = octstr_duplicate(val);
+		octstr_strip_blanks(*service);
+	    }
+	}
 	octstr_destroy(name);
 	octstr_destroy(val);
     }
@@ -431,6 +438,7 @@
                                   int *validity, int *deferred,
                                   int *dlr_mask, Octstr **dlr_url,
                                   Octstr **account, int *pid, int *alt_dcs,
+                                  Octstr **service,
                                   List **tolist)
 {                                    
 
@@ -460,6 +468,7 @@
  *       <user>...</user> ( or username)
  *       <pass>...</pass> ( or password)
  *       <account>...</account>
+ *       <service>...</service>
  *     </from>
  *     <to>smsc-id</to>
  *   </submit>
@@ -493,6 +502,8 @@
 
 	    /* account */
 	    get_tag(tmp, octstr_imm("account"), account, 0, 0);
+	    /* service */
+	    if (service) get_tag(tmp, octstr_imm("service"), service, 0, 0);
 	    O_DESTROY(tmp);
 	}
 
@@ -646,11 +657,22 @@
 			 int mclass, int mwi, int coding, int compress,
 			 int validity, int deferred,
 			 Octstr *dlr_url, int dlr_mask, int pid, int alt_dcs,
-			 Octstr *smsc)
+			 Octstr *smsc, Octstr *service)
 {    
     msg->sms.msgdata = replytext;
     msg->sms.time = time(NULL);
 
+    if (service != NULL) {
+	if (urltrans_accept_x_kannel_headers(trans)) {
+	    octstr_destroy(msg->sms.service);
+	    msg->sms.service = service;
+	} else {
+	    warning(0, "Tried to change service to '%s', denied.",
+		    octstr_get_cstr(service));
+	    octstr_destroy(service);
+	}
+    }
+
     if (dlr_url != NULL) {
 	if (urltrans_accept_x_kannel_headers(trans)) {
 	    octstr_destroy(msg->sms.dlr_url);
@@ -695,6 +717,7 @@
     }
     if (udh != NULL) {
 	if (urltrans_accept_x_kannel_headers(trans)) {
+	    octstr_destroy(msg->sms.udhdata);
 	    msg->sms.udhdata = udh;
 	} else {
 	    warning(0, "Tried to set UDH field, denied.");
@@ -787,6 +810,7 @@
     Octstr *dlr_url;
     Octstr *account;
     Octstr *smsc;
+    Octstr *service;
     int dlr_mask;
     int octets;
     int mclass, mwi, coding, compress, pid, alt_dcs;
@@ -808,7 +832,7 @@
     	
     	get_receiver(id, &msg, &trans);
 
-    	from = to = udh = smsc = NULL;
+    	from = to = udh = smsc = service = NULL;
 	octets = mclass = mwi = coding = compress = pid = alt_dcs = 0;
 	validity = deferred = 0;
 	account = NULL;
@@ -826,7 +850,7 @@
 					  NULL, NULL, &smsc, &mclass, &mwi, 
 					  &coding, &compress, &validity, 
 					  &deferred, &dlr_mask, &dlr_url, 
-					  &account, &pid, &alt_dcs);
+					  &account, &pid, &alt_dcs,&service);
 	    } else if (octstr_case_compare(type, text_plain) == 0) {
 		replytext = octstr_duplicate(reply_body);
                 octstr_destroy(reply_body);
@@ -836,7 +860,7 @@
 					  NULL, NULL, &smsc, &mclass, &mwi, 
 					  &coding, &compress, &validity, 
 					  &deferred, &dlr_mask, &dlr_url, 
-					  &account, &pid, &alt_dcs);
+					  &account, &pid, &alt_dcs,&service);
 	    } else if (octstr_case_compare(type, text_xml) == 0) {
 		replytext = octstr_duplicate(reply_body);
 		octstr_destroy(reply_body); 
@@ -844,7 +868,7 @@
 		get_x_kannel_from_xml(mt_reply, &type, &replytext, reply_headers, &from, &to, &udh,
 				NULL, NULL, &smsc, &mclass, &mwi, &coding,
 				&compress, &validity, &deferred,
-				&dlr_mask, &dlr_url, &account, &pid, &alt_dcs, NULL);
+				&dlr_mask, &dlr_url, &account, &pid, &alt_dcs, &service, NULL);
 	    } else if (octstr_case_compare(type, octet_stream) == 0) {
 		replytext = octstr_duplicate(reply_body);
                 octstr_destroy(reply_body);
@@ -854,7 +878,7 @@
 					  NULL, NULL, &smsc, &mclass, &mwi, 
 					  &coding, &compress, &validity, 
 					  &deferred, &dlr_mask, &dlr_url, 
-					  &account, &pid, &alt_dcs);
+					  &account, &pid, &alt_dcs, &service);
 	    } else {
 		replytext = octstr_duplicate(reply_couldnotrepresent); 
 	    }
@@ -869,7 +893,7 @@
 
 	fill_message(msg, trans, replytext, octets, from, to, udh, mclass,
 			mwi, coding, compress, validity, deferred, dlr_url, 
-			dlr_mask, pid, alt_dcs, smsc);
+			dlr_mask, pid, alt_dcs, smsc, service);
 
     	if (final_url == NULL)
 	    final_url = octstr_imm("");
@@ -2050,11 +2074,12 @@
     Octstr *type, *charset;
     Octstr *dlr_url;
     Octstr *account;
+    Octstr *service;
     List *tolist;
     int dlr_mask = 0;
     int mclass, mwi, coding, compress, validity, deferred, pid, alt_dcs;
  
-    from = to = user = pass = udh = smsc = dlr_url = account = NULL;
+    from = to = user = pass = udh = smsc = dlr_url = account = service = NULL;
     tolist = NULL;
    
     ret = NULL;
@@ -2066,12 +2091,12 @@
 	get_x_kannel_from_xml(mt_push, &type, &body, headers, &from, &to, &udh,
 		       	&user, &pass, &smsc, &mclass, &mwi, &coding,
 		       	&compress, &validity, &deferred, &dlr_mask, &dlr_url, 
-			&account, &pid, &alt_dcs, &tolist);
+			&account, &pid, &alt_dcs, &service, &tolist);
     } else {
 	get_x_kannel_from_headers(headers, &from, &to, &udh,
 			      &user, &pass, &smsc, &mclass, &mwi, &coding,
 			      &compress, &validity, &deferred, 
-			      &dlr_mask, &dlr_url, &account, &pid, &alt_dcs);
+			      &dlr_mask, &dlr_url, &account, &pid, &alt_dcs, &service);
     }
 
     /* check the username and password */
@@ -2922,6 +2947,7 @@
     counter_destroy(catenated_sms_counter);
     octstr_destroy(bb_host);
     octstr_destroy(global_sender);
+    octstr_destroy(accepted_chars);
     octstr_destroy(sendsms_url);
     octstr_destroy(sendota_url);
     octstr_destroy(xmlrpc_url);
