summaryrefslogtreecommitdiff
path: root/accel-pptpd/ppp.c
diff options
context:
space:
mode:
authorKozlov Dmitry <dima@server>2010-08-17 17:29:46 +0400
committerKozlov Dmitry <dima@server>2010-08-17 17:29:46 +0400
commit760d8427f133df486a145e6e7ac7610caf2356fc (patch)
treeebd109efc8882e56165e05f050dd30c9313bb9c7 /accel-pptpd/ppp.c
parentab418b16bf2c9a57dbb7c18141af2eb283c44447 (diff)
downloadaccel-ppp-xebd-760d8427f133df486a145e6e7ac7610caf2356fc.tar.gz
accel-ppp-xebd-760d8427f133df486a145e6e7ac7610caf2356fc.zip
reworked/rewrited lcp handling code to become more abstract
Diffstat (limited to 'accel-pptpd/ppp.c')
-rw-r--r--accel-pptpd/ppp.c44
1 files changed, 32 insertions, 12 deletions
diff --git a/accel-pptpd/ppp.c b/accel-pptpd/ppp.c
index f8a1be5..b032b06 100644
--- a/accel-pptpd/ppp.c
+++ b/accel-pptpd/ppp.c
@@ -86,13 +86,10 @@ int establish_ppp(struct ppp_t *ppp)
ppp->h->twait=-1;
triton_md_register_handler(ppp->h);
triton_md_enable_handler(ppp->h,MD_MODE_READ);
- INIT_LIST_HEAD(&ppp->layers);
+ INIT_LIST_HEAD(&ppp->handlers);
- ppp->lcp_layer=ppp_lcp_init(ppp);
- /*list_add_tail(&ppp->lcp_layer->entry,&ppp->layers);
- ppp_fsm_open(ppp->lcp_layer);
- ppp_fsm_lower_up(ppp->lcp_layer);*/
ppp->cur_layer=PPP_LAYER_LCP;
+
lcp_start(ppp);
return 0;
@@ -104,6 +101,14 @@ exit_close_chan:
return -1;
}
+void print_buf(uint8_t *buf,int size)
+{
+ int i;
+ for(i=0;i<size;i++)
+ printf("%x ",buf[i]);
+ printf("\n");
+}
+
int ppp_send(struct ppp_t *ppp, void *data, int size)
{
int n;
@@ -111,32 +116,38 @@ int ppp_send(struct ppp_t *ppp, void *data, int size)
if (ppp->out_buf_size) return -1;
if (size>PPP_MTU+PPP_HDRLEN) return -1;
+ printf("ppp: send: ");
+ print_buf((uint8_t*)data,size);
+
n=write(ppp->unit_fd,data,size);
- if (n>=0)
+ /*if (n>=0)
{
if (n!=ppp->out_buf_size-ppp->out_buf_pos)
{
ppp->out_buf_pos+=n;
triton_md_enable_handler(ppp->h,MD_MODE_WRITE);
}
- }
+ }*/
return n;
}
static void ppp_read(struct triton_md_handler_t*h)
{
struct ppp_t *ppp=(struct ppp_t *)h->pd;
- struct ppp_layer_t *l=NULL;
+ struct ppp_handler_t *ppp_h=NULL;
uint16_t proto;
ppp->in_buf_size=read(h->fd,ppp->in_buf,PPP_MRU+PPP_HDRLEN);
+ printf("ppp: recv: ");
+ print_buf(ppp->in_buf,ppp->in_buf_size);
+
proto=ntohs(*(uint16_t*)ppp->in_buf);
- list_for_each_entry(l,&ppp->layers,entry)
+ list_for_each_entry(ppp_h,&ppp->handlers,entry)
{
- if (l->proto==proto)
+ if (ppp_h->proto==proto)
{
- l->recv(l);
+ ppp_h->recv(ppp_h);
return;
}
}
@@ -166,7 +177,6 @@ static void ppp_timeout(struct triton_md_handler_t*h)
void ppp_layer_started(struct ppp_t *ppp)
{
- int i;
switch(ppp->cur_layer)
{
case PPP_LAYER_LCP:
@@ -204,3 +214,13 @@ void ppp_terminate(struct ppp_t *ppp)
}
}
+
+void ppp_register_handler(struct ppp_t *ppp,struct ppp_handler_t *h)
+{
+ list_add_tail(&h->entry,&ppp->handlers);
+}
+void ppp_unregister_handler(struct ppp_t *ppp,struct ppp_handler_t *h)
+{
+ list_del(&h->entry);
+}
+