added telnet_send_sb
diff --git a/libtelnet.c b/libtelnet.c
index 09ffd8d..695d213 100644
--- a/libtelnet.c
+++ b/libtelnet.c
@@ -1058,6 +1058,31 @@
 	return rs;
 }
 
+/* send formatted subnegotiation data for TTYPE/ENVIRON/NEW-ENVIRON/MSSP */
+void telnet_format_sb(telnet_t *telnet, unsigned char telopt,
+		size_t count, ...) {
+	va_list va;
+	size_t i;
+
+	/* subnegotiation header */
+	telnet_begin_sb(telnet, telopt);
+
+	/* iterate over the arguments pulling out integers and strings */
+	va_start(va, count);
+	for (i = 0; i != count; ++i) {
+		char t;
+		const char* s;
+		t = va_arg(va, int);
+		s = va_arg(va, const char *);
+		telnet_send(telnet, &t, 1);
+		telnet_send(telnet, s, strlen(s));
+	}
+	va_end(va);
+
+	/* footer */
+	telnet_finish_sb(telnet);
+}
+
 /* send ZMP data */
 void telnet_send_zmp(telnet_t *telnet, size_t argc, const char **argv) {
 	size_t i;