Skip to contentSkip to conversation

ppp: implement ppp_packet_new

PATCH New Kristen Carlson Accardi 1 participant 1 message May 11, 2010

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ppp: implement ppp_packet_new

---
 gatchat/gatppp.c   |   19 +++++++++++++++++++
 gatchat/ppp.h      |    2 ++
 gatchat/ppp_auth.c |    4 +---
 gatchat/ppp_cp.c   |    5 +----
 gatchat/ppp_net.c  |    2 +-
 5 files changed, 24 insertions(+), 8 deletions(-)
gatchat/gatppp.c +19 -0
index 82d1eca..b6f6d8f 100644
@@ -84,6 +84,25 @@ void ppp_debug(GAtPPP *ppp, const char *str)
 	ppp->debugf(str, ppp->debug_data);
 }
 
+void ppp_packet_init(struct ppp_header *ppp_packet, guint16 protocol)
+{
+	ppp_packet->proto = htons(protocol);
+	ppp_packet->address = PPP_ADDR_FIELD;
+	ppp_packet->control = PPP_CTRL;
+}
+
+struct ppp_header *ppp_packet_new(gsize infolen, guint16 protocol)
+{
+	struct ppp_header *ppp_packet;
+
+	ppp_packet = g_try_malloc0(infolen + sizeof(*ppp_packet));
+	if (ppp_packet == NULL)
+		return NULL;
+
+	ppp_packet_init(ppp_packet, protocol);
+	return ppp_packet;
+}
+
 /*
  * Silently discard packets which are received when they shouldn't be
  */
gatchat/ppp.h +2 -0
index 7f6c950..eb552c4 100644
@@ -114,3 +114,5 @@ void ppp_lcp_finished_notify(GAtPPP *ppp);
 void ppp_set_recv_accm(GAtPPP *ppp, guint32 accm);
 void ppp_set_xmit_accm(GAtPPP *ppp, guint32 accm);
 void ppp_set_mtu(GAtPPP *ppp, const guint8 *data);
+struct ppp_header *ppp_packet_new(gsize infolen, guint16 protocol);
+void ppp_packet_init(struct ppp_header *ppp_packet, guint16 protocol);
gatchat/ppp_auth.c +1 -3
index eae5d17..d26b764 100644
@@ -83,12 +83,10 @@ static void chap_process_challenge(struct ppp_chap *chap, const guint8 *packet)
 	 */
 	digest_len = g_checksum_type_get_length(chap->method);
 	response_length = digest_len + sizeof(*header) + 1;
-	ppp_packet = g_try_malloc0(response_length + sizeof(struct ppp_header));
+	ppp_packet = ppp_packet_new(response_length, CHAP_PROTOCOL);
 	if (!ppp_packet)
 		goto challenge_out;
 
-	/* add our protocol information */
-	ppp_packet->proto = htons(CHAP_PROTOCOL);
 	response = (struct chap_header *) &ppp_packet->info;
 	if (response) {
 		response->code = RESPONSE;
gatchat/ppp_cp.c +1 -4
index e152f6e..bade6bb 100644
@@ -204,13 +204,10 @@ static struct pppcp_packet *pppcp_packet_new(struct pppcp_data *data,
 	struct ppp_header *ppp_packet;
 	guint16 packet_length = bufferlen + sizeof(*packet);
 
-	ppp_packet = g_try_malloc0(packet_length + sizeof(*ppp_packet));
+	ppp_packet = ppp_packet_new(packet_length, data->driver->proto);
 	if (!ppp_packet)
 		return NULL;
 
-	/* add our protocol information */
-	ppp_packet->proto = htons(data->driver->proto);
-
 	/* advance past protocol to add CP header information */
 	packet = (struct pppcp_packet *) (ppp_packet->info);
 
gatchat/ppp_net.c +1 -1
index bd1a60e..387a648 100644
@@ -109,7 +109,7 @@ static gboolean ppp_net_callback(GIOChannel *channel, GIOCondition cond,
 				buf + sizeof(struct ppp_header), net->mtu,
 				&bytes_read, &error);
 		if (bytes_read > 0) {
-			ppp->proto = htons(PPP_IP_PROTO);
+			ppp_packet_init(ppp, PPP_IP_PROTO);
 			ppp_transmit(net->ppp, (guint8 *) buf, bytes_read);
 		}
 		if (status != G_IO_STATUS_NORMAL && status != G_IO_STATUS_AGAIN)
Signature · 1 line
1.6.6.1