datalink.c (53830) | datalink.c (54055) |
---|---|
1/*- 2 * Copyright (c) 1998 Brian Somers <brian@Awfulhak.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * | 1/*- 2 * Copyright (c) 1998 Brian Somers <brian@Awfulhak.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * |
26 * $FreeBSD: head/usr.sbin/ppp/datalink.c 53830 1999-11-28 15:50:08Z brian $ | 26 * $FreeBSD: head/usr.sbin/ppp/datalink.c 54055 1999-12-03 06:33:10Z brian $ |
27 */ 28 29#include <sys/param.h> 30#include <netinet/in.h> 31#include <netinet/in_systm.h> 32#include <netinet/ip.h> 33#include <sys/un.h> 34 --- 80 unchanged lines hidden (view full) --- 115{ 116 if (dl->physical->type == PHYS_DEDICATED && !dl->bundle->CleaningUp && 117 dl->physical->fd != -1) { 118 /* Don't close our device if the link is dedicated */ 119 datalink_LoginDone(dl); 120 return; 121 } 122 | 27 */ 28 29#include <sys/param.h> 30#include <netinet/in.h> 31#include <netinet/in_systm.h> 32#include <netinet/ip.h> 33#include <sys/un.h> 34 --- 80 unchanged lines hidden (view full) --- 115{ 116 if (dl->physical->type == PHYS_DEDICATED && !dl->bundle->CleaningUp && 117 dl->physical->fd != -1) { 118 /* Don't close our device if the link is dedicated */ 119 datalink_LoginDone(dl); 120 return; 121 } 122 |
123 chat_Destroy(&dl->chat); | 123 chat_Finish(&dl->chat); |
124 physical_Close(dl->physical); 125 dl->phone.chosen = "N/A"; 126 127 if (dl->cbcp.required) { 128 log_Printf(LogPHASE, "Call peer back on %s\n", dl->cbcp.fsm.phone); 129 dl->cfg.callback.opmask = 0; 130 strncpy(dl->cfg.phone.list, dl->cbcp.fsm.phone, 131 sizeof dl->cfg.phone.list - 1); --- 66 unchanged lines hidden (view full) --- 198 if (*phone) 199 log_Printf(LogPHASE, "Phone: %s\n", phone); 200 return phone; 201} 202 203static void 204datalink_LoginDone(struct datalink *dl) 205{ | 124 physical_Close(dl->physical); 125 dl->phone.chosen = "N/A"; 126 127 if (dl->cbcp.required) { 128 log_Printf(LogPHASE, "Call peer back on %s\n", dl->cbcp.fsm.phone); 129 dl->cfg.callback.opmask = 0; 130 strncpy(dl->cfg.phone.list, dl->cbcp.fsm.phone, 131 sizeof dl->cfg.phone.list - 1); --- 66 unchanged lines hidden (view full) --- 198 if (*phone) 199 log_Printf(LogPHASE, "Phone: %s\n", phone); 200 return phone; 201} 202 203static void 204datalink_LoginDone(struct datalink *dl) 205{ |
206 chat_Destroy(&dl->chat); | 206 chat_Finish(&dl->chat); |
207 208 if (!dl->script.packetmode) { 209 dl->dial.tries = -1; 210 dl->dial.incs = 0; 211 datalink_NewState(dl, DATALINK_READY); 212 } else if (!physical_Raw(dl->physical)) { 213 dl->dial.tries = 0; 214 log_Printf(LogWARN, "datalink_LoginDone: Not connected.\n"); 215 if (dl->script.run) { 216 datalink_NewState(dl, DATALINK_LOGOUT); | 207 208 if (!dl->script.packetmode) { 209 dl->dial.tries = -1; 210 dl->dial.incs = 0; 211 datalink_NewState(dl, DATALINK_READY); 212 } else if (!physical_Raw(dl->physical)) { 213 dl->dial.tries = 0; 214 log_Printf(LogWARN, "datalink_LoginDone: Not connected.\n"); 215 if (dl->script.run) { 216 datalink_NewState(dl, DATALINK_LOGOUT); |
217 chat_Init(&dl->chat, dl->physical, dl->cfg.script.logout, NULL); | 217 chat_Setup(&dl->chat, dl->cfg.script.logout, NULL); |
218 } else { 219 physical_StopDeviceTimer(dl->physical); 220 if (dl->physical->type == PHYS_DEDICATED) 221 /* force a redial timeout */ 222 physical_Close(dl->physical); 223 datalink_HangupDone(dl); 224 } 225 } else { --- 42 unchanged lines hidden (view full) --- 268 if (--dl->dial.tries < 0) 269 dl->dial.tries = 0; 270 if (physical_Open(dl->physical, dl->bundle) >= 0) { 271 log_WritePrompts(dl, "%s: Entering terminal mode on %s\r\n" 272 "Type `~?' for help\r\n", dl->name, 273 dl->physical->name.full); 274 if (dl->script.run) { 275 datalink_NewState(dl, DATALINK_DIAL); | 218 } else { 219 physical_StopDeviceTimer(dl->physical); 220 if (dl->physical->type == PHYS_DEDICATED) 221 /* force a redial timeout */ 222 physical_Close(dl->physical); 223 datalink_HangupDone(dl); 224 } 225 } else { --- 42 unchanged lines hidden (view full) --- 268 if (--dl->dial.tries < 0) 269 dl->dial.tries = 0; 270 if (physical_Open(dl->physical, dl->bundle) >= 0) { 271 log_WritePrompts(dl, "%s: Entering terminal mode on %s\r\n" 272 "Type `~?' for help\r\n", dl->name, 273 dl->physical->name.full); 274 if (dl->script.run) { 275 datalink_NewState(dl, DATALINK_DIAL); |
276 chat_Init(&dl->chat, dl->physical, dl->cfg.script.dial, 277 *dl->cfg.script.dial ? 278 datalink_ChoosePhoneNumber(dl) : ""); | 276 chat_Setup(&dl->chat, dl->cfg.script.dial, *dl->cfg.script.dial ? 277 datalink_ChoosePhoneNumber(dl) : ""); |
279 if (!(dl->physical->type & (PHYS_DDIAL|PHYS_DEDICATED)) && 280 dl->cfg.dial.max) 281 log_Printf(LogCHAT, "%s: Dial attempt %u of %d\n", 282 dl->name, dl->cfg.dial.max - dl->dial.tries, 283 dl->cfg.dial.max); 284 } else 285 datalink_NewState(dl, DATALINK_CARRIER); 286 return datalink_UpdateSet(d, r, w, e, n); --- 31 unchanged lines hidden (view full) --- 318 switch (physical_AwaitCarrier(dl->physical)) { 319 case CARRIER_PENDING: 320 log_Printf(LogDEBUG, "Waiting for carrier\n"); 321 return 0; /* A device timer is running to wake us up again */ 322 323 case CARRIER_OK: 324 if (dl->script.run) { 325 datalink_NewState(dl, DATALINK_LOGIN); | 278 if (!(dl->physical->type & (PHYS_DDIAL|PHYS_DEDICATED)) && 279 dl->cfg.dial.max) 280 log_Printf(LogCHAT, "%s: Dial attempt %u of %d\n", 281 dl->name, dl->cfg.dial.max - dl->dial.tries, 282 dl->cfg.dial.max); 283 } else 284 datalink_NewState(dl, DATALINK_CARRIER); 285 return datalink_UpdateSet(d, r, w, e, n); --- 31 unchanged lines hidden (view full) --- 317 switch (physical_AwaitCarrier(dl->physical)) { 318 case CARRIER_PENDING: 319 log_Printf(LogDEBUG, "Waiting for carrier\n"); 320 return 0; /* A device timer is running to wake us up again */ 321 322 case CARRIER_OK: 323 if (dl->script.run) { 324 datalink_NewState(dl, DATALINK_LOGIN); |
326 chat_Init(&dl->chat, dl->physical, dl->cfg.script.login, NULL); | 325 chat_Setup(&dl->chat, dl->cfg.script.login, NULL); |
327 } else 328 datalink_LoginDone(dl); 329 return datalink_UpdateSet(d, r, w, e, n); 330 331 case CARRIER_LOST: 332 physical_Offline(dl->physical); /* Is this required ? */ 333 if (dl->script.run) { 334 datalink_NewState(dl, DATALINK_HANGUP); | 326 } else 327 datalink_LoginDone(dl); 328 return datalink_UpdateSet(d, r, w, e, n); 329 330 case CARRIER_LOST: 331 physical_Offline(dl->physical); /* Is this required ? */ 332 if (dl->script.run) { 333 datalink_NewState(dl, DATALINK_HANGUP); |
335 chat_Init(&dl->chat, dl->physical, dl->cfg.script.hangup, NULL); | 334 chat_Setup(&dl->chat, dl->cfg.script.hangup, NULL); |
336 return datalink_UpdateSet(d, r, w, e, n); 337 } else { 338 datalink_HangupDone(dl); 339 return 0; /* Maybe bundle_CleanDatalinks() has something to do */ 340 } 341 } 342 343 case DATALINK_HANGUP: --- 9 unchanged lines hidden (view full) --- 353 datalink_HangupDone(dl); 354 break; 355 case DATALINK_DIAL: 356 datalink_NewState(dl, DATALINK_CARRIER); 357 return datalink_UpdateSet(d, r, w, e, n); 358 case DATALINK_LOGOUT: 359 datalink_NewState(dl, DATALINK_HANGUP); 360 physical_Offline(dl->physical); | 335 return datalink_UpdateSet(d, r, w, e, n); 336 } else { 337 datalink_HangupDone(dl); 338 return 0; /* Maybe bundle_CleanDatalinks() has something to do */ 339 } 340 } 341 342 case DATALINK_HANGUP: --- 9 unchanged lines hidden (view full) --- 352 datalink_HangupDone(dl); 353 break; 354 case DATALINK_DIAL: 355 datalink_NewState(dl, DATALINK_CARRIER); 356 return datalink_UpdateSet(d, r, w, e, n); 357 case DATALINK_LOGOUT: 358 datalink_NewState(dl, DATALINK_HANGUP); 359 physical_Offline(dl->physical); |
361 chat_Init(&dl->chat, dl->physical, dl->cfg.script.hangup, NULL); | 360 chat_Setup(&dl->chat, dl->cfg.script.hangup, NULL); |
362 return datalink_UpdateSet(d, r, w, e, n); 363 case DATALINK_LOGIN: 364 dl->phone.alt = NULL; 365 datalink_LoginDone(dl); 366 return datalink_UpdateSet(d, r, w, e, n); 367 } 368 break; 369 case CHAT_FAILED: 370 /* Going down - script failed */ 371 log_Printf(LogWARN, "Chat script failed\n"); 372 switch(dl->state) { 373 case DATALINK_HANGUP: 374 datalink_HangupDone(dl); 375 break; 376 case DATALINK_DIAL: 377 case DATALINK_LOGOUT: 378 case DATALINK_LOGIN: 379 datalink_NewState(dl, DATALINK_HANGUP); 380 physical_Offline(dl->physical); | 361 return datalink_UpdateSet(d, r, w, e, n); 362 case DATALINK_LOGIN: 363 dl->phone.alt = NULL; 364 datalink_LoginDone(dl); 365 return datalink_UpdateSet(d, r, w, e, n); 366 } 367 break; 368 case CHAT_FAILED: 369 /* Going down - script failed */ 370 log_Printf(LogWARN, "Chat script failed\n"); 371 switch(dl->state) { 372 case DATALINK_HANGUP: 373 datalink_HangupDone(dl); 374 break; 375 case DATALINK_DIAL: 376 case DATALINK_LOGOUT: 377 case DATALINK_LOGIN: 378 datalink_NewState(dl, DATALINK_HANGUP); 379 physical_Offline(dl->physical); |
381 chat_Init(&dl->chat, dl->physical, dl->cfg.script.hangup, NULL); | 380 chat_Setup(&dl->chat, dl->cfg.script.hangup, NULL); |
382 return datalink_UpdateSet(d, r, w, e, n); 383 } 384 break; 385 } 386 break; 387 388 case DATALINK_READY: 389 case DATALINK_LCP: --- 117 unchanged lines hidden (view full) --- 507 dl->stayonline = 0; 508 physical_StopDeviceTimer(dl->physical); 509 datalink_NewState(dl, DATALINK_READY); 510 } else if (dl->state != DATALINK_CLOSED && dl->state != DATALINK_HANGUP) { 511 physical_Offline(dl->physical); 512 if (dl->script.run && dl->state != DATALINK_OPENING) { 513 if (dl->state == DATALINK_LOGOUT) { 514 datalink_NewState(dl, DATALINK_HANGUP); | 381 return datalink_UpdateSet(d, r, w, e, n); 382 } 383 break; 384 } 385 break; 386 387 case DATALINK_READY: 388 case DATALINK_LCP: --- 117 unchanged lines hidden (view full) --- 506 dl->stayonline = 0; 507 physical_StopDeviceTimer(dl->physical); 508 datalink_NewState(dl, DATALINK_READY); 509 } else if (dl->state != DATALINK_CLOSED && dl->state != DATALINK_HANGUP) { 510 physical_Offline(dl->physical); 511 if (dl->script.run && dl->state != DATALINK_OPENING) { 512 if (dl->state == DATALINK_LOGOUT) { 513 datalink_NewState(dl, DATALINK_HANGUP); |
515 chat_Init(&dl->chat, dl->physical, dl->cfg.script.hangup, NULL); | 514 chat_Setup(&dl->chat, dl->cfg.script.hangup, NULL); |
516 } else { 517 datalink_NewState(dl, DATALINK_LOGOUT); | 515 } else { 516 datalink_NewState(dl, DATALINK_LOGOUT); |
518 chat_Init(&dl->chat, dl->physical, dl->cfg.script.logout, NULL); | 517 chat_Setup(&dl->chat, dl->cfg.script.logout, NULL); |
519 } 520 } else 521 datalink_HangupDone(dl); 522 } 523} 524 525static void 526datalink_LayerStart(void *v, struct fsm *fp) --- 293 unchanged lines hidden (view full) --- 820 return NULL; 821 } 822 823 pap_Init(&dl->pap, dl->physical); 824 chap_Init(&dl->chap, dl->physical); 825 cbcp_Init(&dl->cbcp, dl->physical); 826 827 memset(&dl->chat, '\0', sizeof dl->chat); /* Force buf{start,end} reset */ | 518 } 519 } else 520 datalink_HangupDone(dl); 521 } 522} 523 524static void 525datalink_LayerStart(void *v, struct fsm *fp) --- 293 unchanged lines hidden (view full) --- 819 return NULL; 820 } 821 822 pap_Init(&dl->pap, dl->physical); 823 chap_Init(&dl->chap, dl->physical); 824 cbcp_Init(&dl->cbcp, dl->physical); 825 826 memset(&dl->chat, '\0', sizeof dl->chat); /* Force buf{start,end} reset */ |
828 chat_Init(&dl->chat, dl->physical, NULL, NULL); | 827 chat_Init(&dl->chat, dl->physical); |
829 830 log_Printf(LogPHASE, "%s: Created in %s state\n", 831 dl->name, datalink_State(dl)); 832 833 return dl; 834} 835 836struct datalink * --- 47 unchanged lines hidden (view full) --- 884 memcpy(&dl->physical->link.ccp.cfg, &odl->physical->link.ccp.cfg, 885 sizeof dl->physical->link.ccp.cfg); 886 memcpy(&dl->physical->async.cfg, &odl->physical->async.cfg, 887 sizeof dl->physical->async.cfg); 888 889 cbcp_Init(&dl->cbcp, dl->physical); 890 891 memset(&dl->chat, '\0', sizeof dl->chat); /* Force buf{start,end} reset */ | 828 829 log_Printf(LogPHASE, "%s: Created in %s state\n", 830 dl->name, datalink_State(dl)); 831 832 return dl; 833} 834 835struct datalink * --- 47 unchanged lines hidden (view full) --- 883 memcpy(&dl->physical->link.ccp.cfg, &odl->physical->link.ccp.cfg, 884 sizeof dl->physical->link.ccp.cfg); 885 memcpy(&dl->physical->async.cfg, &odl->physical->async.cfg, 886 sizeof dl->physical->async.cfg); 887 888 cbcp_Init(&dl->cbcp, dl->physical); 889 890 memset(&dl->chat, '\0', sizeof dl->chat); /* Force buf{start,end} reset */ |
892 chat_Init(&dl->chat, dl->physical, NULL, NULL); | 891 chat_Init(&dl->chat, dl->physical); |
893 894 log_Printf(LogPHASE, "%s: Cloned in %s state\n", 895 dl->name, datalink_State(dl)); 896 897 return dl; 898} 899 900struct datalink * 901datalink_Destroy(struct datalink *dl) 902{ 903 struct datalink *result; 904 905 if (dl->state != DATALINK_CLOSED) { 906 log_Printf(LogERROR, "Oops, destroying a datalink in state %s\n", 907 datalink_State(dl)); 908 switch (dl->state) { 909 case DATALINK_HANGUP: 910 case DATALINK_DIAL: 911 case DATALINK_LOGIN: | 892 893 log_Printf(LogPHASE, "%s: Cloned in %s state\n", 894 dl->name, datalink_State(dl)); 895 896 return dl; 897} 898 899struct datalink * 900datalink_Destroy(struct datalink *dl) 901{ 902 struct datalink *result; 903 904 if (dl->state != DATALINK_CLOSED) { 905 log_Printf(LogERROR, "Oops, destroying a datalink in state %s\n", 906 datalink_State(dl)); 907 switch (dl->state) { 908 case DATALINK_HANGUP: 909 case DATALINK_DIAL: 910 case DATALINK_LOGIN: |
912 chat_Destroy(&dl->chat); /* Gotta blat the timers ! */ | 911 chat_Finish(&dl->chat); /* Gotta blat the timers ! */ |
913 break; 914 } 915 } 916 | 912 break; 913 } 914 } 915 |
916 chat_Destroy(&dl->chat); |
|
917 timer_Stop(&dl->dial.timer); 918 result = dl->next; 919 physical_Destroy(dl->physical); 920 free(dl->name); 921 free(dl); 922 923 return result; 924} --- 397 unchanged lines hidden (view full) --- 1322 1323 copy = dl->chap.auth.cfg.fsm; 1324 chap_Init(&dl->chap, dl->physical); 1325 dl->chap.auth.cfg.fsm = copy; 1326 1327 cbcp_Init(&dl->cbcp, dl->physical); 1328 1329 memset(&dl->chat, '\0', sizeof dl->chat); /* Force buf{start,end} reset */ | 917 timer_Stop(&dl->dial.timer); 918 result = dl->next; 919 physical_Destroy(dl->physical); 920 free(dl->name); 921 free(dl); 922 923 return result; 924} --- 397 unchanged lines hidden (view full) --- 1322 1323 copy = dl->chap.auth.cfg.fsm; 1324 chap_Init(&dl->chap, dl->physical); 1325 dl->chap.auth.cfg.fsm = copy; 1326 1327 cbcp_Init(&dl->cbcp, dl->physical); 1328 1329 memset(&dl->chat, '\0', sizeof dl->chat); /* Force buf{start,end} reset */ |
1330 chat_Init(&dl->chat, dl->physical, NULL, NULL); | 1330 chat_Init(&dl->chat, dl->physical); |
1331 1332 log_Printf(LogPHASE, "%s: Transferred in %s state\n", 1333 dl->name, datalink_State(dl)); 1334 } 1335 1336 return dl; 1337} 1338 --- 91 unchanged lines hidden --- | 1331 1332 log_Printf(LogPHASE, "%s: Transferred in %s state\n", 1333 dl->name, datalink_State(dl)); 1334 } 1335 1336 return dl; 1337} 1338 --- 91 unchanged lines hidden --- |