00001 #include <qfile.h>
00002 #include <qfileinfo.h>
00003 #include "PPPedit.h"
00004 #include "ppp_NNI.h"
00005 #include "ppp_NN.h"
00006
00007 APPP::APPP( PPPNetNode * PNN ) : ANetNodeInstance( PNN ) {
00008 Data.DNS.ServerAssigned = 1;
00009 Data.DNS.DomainName = "";
00010
00011 Data.Auth.Mode = 0;
00012 Data.Auth.Login.Expect = "ogin:";
00013 Data.Auth.Password.Expect = "assword:";
00014 Data.Auth.PCEMode = 0;
00015 Data.Auth.Client = "*";
00016 Data.Auth.Server = "*";
00017 Data.Auth.Secret = "";
00018
00019 Data.IP.LocalAddress = "10.0.0.1";
00020 Data.IP.RemoteAddress = "10.0.0.2";
00021 Data.IP.LocalOverrule = 1;
00022 Data.IP.RemoteOverrule = 1;
00023
00024 Data.IP.GWAutomatic = 1;
00025 Data.IP.GWAddress = "";
00026 Data.IP.GWIsDefault = 1;
00027 Data.IP.GWIfNotSet = 1;
00028
00029 Data.Run.PreConnect = "";
00030 Data.Run.PostConnect = "";
00031 Data.Run.PreDisconnect = "";
00032 Data.Run.PostDisconnect = "";
00033
00034 GUI = 0;
00035 RT = 0;
00036
00037 }
00038
00039 void APPP::setSpecificAttribute( QString & A, QString & V ) {
00040 if( A.startsWith( "dns" ) ) {
00041 if( A == "dnsserverassigned" ) {
00042 Data.DNS.ServerAssigned = (V == "yes");
00043 } else if( A == "dnsdomainname" ) {
00044 Data.DNS.DomainName = V;
00045 } else if( A == "dnsserver" ) {
00046 Data.DNS.Servers.resize( Data.DNS.Servers.size()+1 );
00047 Data.DNS.Servers[Data.DNS.Servers.size()-1] =
00048 new QString( V );
00049 }
00050 } else if( A.startsWith( "auth" ) ) {
00051 if( A == "authmode" ) {
00052 Data.Auth.Mode = V.toShort();
00053 } else if( A == "authloginexpect" ) {
00054 Data.Auth.Login.Expect = V;
00055 } else if( A == "authloginsend" ) {
00056 Data.Auth.Login.Send = V;
00057 } else if( A == "authpasswordexpect" ) {
00058 Data.Auth.Password.Expect = V;
00059 } else if( A == "authpasswordsend" ) {
00060 Data.Auth.Password.Send = V;
00061 } else if( A == "authpcemode" ) {
00062 Data.Auth.PCEMode = V.toShort();
00063 } else if( A == "authclient" ) {
00064 Data.Auth.Client = V;
00065 } else if( A == "authserver" ) {
00066 Data.Auth.Server = V;
00067 } else if( A == "authsecret" ) {
00068 Data.Auth.Secret = V;
00069 }
00070 } else if( A.startsWith( "ip" ) ) {
00071 if( A == "iplocaloverrule" ) {
00072 Data.IP.LocalOverrule = (V == "yes");
00073 } else if( A == "ipremoteoverrule" ) {
00074 Data.IP.RemoteOverrule = (V == "yes");
00075 } else if( A == "ipgwautomatic" ) {
00076 Data.IP.GWAutomatic = (V == "yes");
00077 } else if( A == "ipgwisdefault" ) {
00078 Data.IP.GWIsDefault = (V == "yes");
00079 } else if( A == "ipgwifnotset" ) {
00080 Data.IP.GWIfNotSet = (V == "yes");
00081 } else if( A == "iplocaladdress" ) {
00082 Data.IP.LocalAddress = V;
00083 } else if( A == "ipremoteaddress" ) {
00084 Data.IP.RemoteAddress = V;
00085 } else if( A == "ipgwaddress" ) {
00086 Data.IP.GWAddress = V;
00087 }
00088 } else if( A.startsWith( "run" ) ) {
00089 if( A == "runpreconnect" ) {
00090 Data.Run.PreConnect = V;
00091 } else if( A == "runpostconnect" ) {
00092 Data.Run.PostConnect = V;
00093 } else if( A == "runpredisconnect" ) {
00094 Data.Run.PreDisconnect = V;
00095 } else if( A == "runpostdisconnect" ) {
00096 Data.Run.PostDisconnect = V;
00097 }
00098 }
00099 }
00100
00101 void APPP::saveSpecificAttribute( QTextStream & TS ) {
00102 TS << "dnsserverassigned=" <<
00103 ( ( Data.DNS.ServerAssigned ) ? "yes" : "no" ) << endl;
00104 TS << "dnsdomainname=" << Data.DNS.DomainName << endl;
00105 for( unsigned int i = 0; i < Data.DNS.Servers.size(); i ++ ) {
00106 TS << "dnsserver=" << *(Data.DNS.Servers[i]) << endl;
00107 }
00108 TS << "authmode=" << Data.Auth.Mode << endl;
00109 TS << "authloginexpect=" << quote( Data.Auth.Login.Expect ) << endl;
00110 TS << "authloginsend=" << quote( Data.Auth.Login.Send ) << endl;
00111 TS << "authpasswordexpect=" << quote( Data.Auth.Password.Expect ) << endl;
00112 TS << "authpasswordsend=" << quote( Data.Auth.Password.Send ) << endl;
00113 TS << "authpcemode=" << Data.Auth.PCEMode << endl;
00114 TS << "authclient=" << Data.Auth.Client << endl;
00115 TS << "authserver=" << Data.Auth.Server << endl;
00116 TS << "authsecret=" << quote( Data.Auth.Secret ) << endl;
00117 TS << "ipgwautomatic=" << ( ( Data.IP.GWAutomatic ) ? "yes" : "no" ) << endl;
00118 TS << "ipgwisdefault=" << ( ( Data.IP.GWIsDefault ) ? "yes" : "no" ) << endl;
00119 TS << "ipgwifnotset=" << ( ( Data.IP.GWIfNotSet ) ? "yes" : "no" ) << endl;
00120 TS << "iplocaloverrule=" << ( ( Data.IP.LocalOverrule ) ? "yes" : "no" ) << endl;
00121 TS << "ipremoteoverrule=" << ( ( Data.IP.RemoteOverrule ) ? "yes" : "no" ) << endl;
00122 TS << "iplocaladdress=" << Data.IP.LocalAddress << endl;
00123 TS << "ipremoteaddress=" << Data.IP.RemoteAddress << endl;
00124 TS << "ipgwaddress=" << Data.IP.GWAddress << endl;
00125
00126 TS << "runpreconnect=" << Data.Run.PreConnect << endl;
00127 TS << "runpostconnect=" << Data.Run.PostConnect << endl;
00128 TS << "runpredisconnect=" << Data.Run.PreDisconnect << endl;
00129 TS << "runpostdisconnect=" << Data.Run.PostDisconnect << endl;
00130
00131 }
00132
00133 QWidget * APPP::edit( QWidget * parent ) {
00134 GUI = new PPPEdit( parent );
00135 GUI->showData( Data );
00136 return GUI;
00137 }
00138
00139 QString APPP::acceptable( void ) {
00140 return ( GUI ) ? GUI->acceptable( ) : QString();
00141 }
00142
00143 void APPP::commit( void ) {
00144 if( GUI && GUI->commit( Data ) ) {
00145 setModified( 1 );
00146 }
00147 }
00148
00149 bool APPP::openFile( SystemFile & SF, QStringList & SL ) {
00150 if( SF.name() == "peers" ) {
00151 SL << "/tmp/ppp" << "peers" ;
00152 SF.setPath( removeSpaces(
00153 QString( "/tmp/ppp/peers/" ) + networkSetup()->name() ) );
00154 return 1;
00155 } else if ( SF.name() == "chatscripts" ) {
00156 SL << "/tmp/chatscripts";
00157 SF.setPath( removeSpaces(
00158 QString( "/tmp/chatscripts/" ) + networkSetup()->name() ) );
00159 return 1;
00160 }
00161 return 0;
00162 }
00163
00164 short APPP::generateFile( SystemFile & SF, long DevNr ) {
00165 short rvl, rvd;
00166
00167 rvl = 1;
00168 rvd = 1;
00169
00170 if( SF.name() == "pap-secrets" ) {
00171 Log(("Generate PPP for %s\n", SF.name().latin1() ));
00172
00173 if( Data.Auth.Mode == 1 && Data.Auth.PCEMode == 0 ) {
00174 SF << "# secrets for "
00175 << networkSetup()->name().latin1()
00176 << endl;
00177 SF << Data.Auth.Client
00178 << " "
00179 << Data.Auth.Server
00180 << " "
00181 << Data.Auth.Secret
00182 << endl;
00183 rvl = 0;
00184 rvd = networkSetup()->getToplevel()->generateFileEmbedded(
00185 SF, DevNr );
00186 }
00187 } else if( SF.name() == "chap-secrets" ) {
00188 Log(("Generate PPP for %s\n", SF.name().latin1() ));
00189 if( Data.Auth.Mode == 1 && Data.Auth.PCEMode != 0 ) {
00190
00191 SF << "# secrets for "
00192 << networkSetup()->name().latin1()
00193 << endl;
00194 SF << Data.Auth.Client
00195 << " "
00196 << Data.Auth.Server
00197 << " "
00198 << Data.Auth.Secret
00199 << endl;
00200
00201 rvl = 0;
00202 rvd = networkSetup()->getToplevel()->generateFileEmbedded(
00203 SF, DevNr );
00204 }
00205 } else if ( SF.name() == "peers" ) {
00206
00207 QFileInfo FI(SF.path());
00208 Log(("Generate PPP for %s\n", SF.name().latin1() ));
00209
00210 SF << "connect \"/usr/sbin/chat -v -f /etc/chatscripts/"
00211 << FI.baseName()
00212 << "\""
00213 << endl;
00214
00215 if( Data.IP.GWIsDefault ) {
00216 SF << "defaultroute"
00217 << endl;
00218 }
00219
00220 SF << "linkname "
00221 << removeSpaces( SF.name().latin1() )
00222 << endl;
00223
00224
00225 rvl = 0;
00226 rvd = networkSetup()->getToplevel()->generateFileEmbedded(
00227 SF, DevNr );
00228 } else if ( SF.name() == "chatscripts" ) {
00229 Log(("Generate PPP for %s\n", SF.name().latin1() ));
00230 rvl = 0;
00231 rvd = networkSetup()->getToplevel()->generateFileEmbedded(
00232 SF, DevNr );
00233 }
00234
00235 return (rvd == 2 || rvl == 2 ) ? 2 :
00236 (rvd == 0 || rvl == 0 ) ? 0 : 1;
00237 }