bool test(bool is_kernel_exact = true) { // types typedef typename K::FT FT; typedef typename K::Line_3 Line; typedef typename K::Point_3 Point; typedef typename K::Segment_3 Segment; typedef typename K::Ray_3 Ray; typedef typename K::Line_3 Line; typedef typename K::Triangle_3 Triangle; /* ------------------------------------- // Test data is something like that (in t supporting plane) // Triangle is (p1,p2,p3) // // +E +1 // / \ // +C 6+ +8 +4 +B // / 9++7 \ // 3+-------+5--+2 // // +F +A ------------------------------------- */ Point p1(FT(1.), FT(0.), FT(0.)); Point p2(FT(0.), FT(1.), FT(0.)); Point p3(FT(0.), FT(0.), FT(1.)); Triangle t(p1,p2,p3); // Edges of t Segment s12(p1,p2); Segment s21(p2,p1); Segment s13(p1,p3); Segment s23(p2,p3); Segment s32(p3,p2); Segment s31(p3,p1); bool b = test_aux(is_kernel_exact,t,s12,"t-s12",s12); b &= test_aux(is_kernel_exact,t,s21,"t-s21",s21); b &= test_aux(is_kernel_exact,t,s13,"t-s13",s13); b &= test_aux(is_kernel_exact,t,s23,"t-s23",s23); // Inside points Point p4(FT(0.5), FT(0.5), FT(0.)); Point p5(FT(0.), FT(0.75), FT(0.25)); Point p6(FT(0.5), FT(0.), FT(0.5)); Point p7(FT(0.25), FT(0.625), FT(0.125)); Point p8(FT(0.5), FT(0.25), FT(0.25)); Segment s14(p1,p4); Segment s41(p4,p1); Segment s24(p2,p4); Segment s42(p4,p2); Segment s15(p1,p5); Segment s25(p2,p5); Segment s34(p3,p4); Segment s35(p3,p5); Segment s36(p3,p6); Segment s45(p4,p5); Segment s16(p1,p6); Segment s26(p2,p6); Segment s62(p6,p2); Segment s46(p4,p6); Segment s48(p4,p8); Segment s56(p5,p6); Segment s65(p6,p5); Segment s64(p6,p4); Segment s17(p1,p7); Segment s67(p6,p7); Segment s68(p6,p8); Segment s86(p8,p6); Segment s78(p7,p8); Segment s87(p8,p7); b &= test_aux(is_kernel_exact,t,s14,"t-s14",s14); b &= test_aux(is_kernel_exact,t,s41,"t-s41",s41); b &= test_aux(is_kernel_exact,t,s24,"t-s24",s24); b &= test_aux(is_kernel_exact,t,s42,"t-s42",s42); b &= test_aux(is_kernel_exact,t,s15,"t-s15",s15); b &= test_aux(is_kernel_exact,t,s25,"t-s25",s25); b &= test_aux(is_kernel_exact,t,s34,"t-s34",s34); b &= test_aux(is_kernel_exact,t,s35,"t-s35",s35); b &= test_aux(is_kernel_exact,t,s36,"t-s36",s36); b &= test_aux(is_kernel_exact,t,s45,"t-s45",s45); b &= test_aux(is_kernel_exact,t,s16,"t-s16",s16); b &= test_aux(is_kernel_exact,t,s26,"t-s26",s26); b &= test_aux(is_kernel_exact,t,s62,"t-s62",s62); b &= test_aux(is_kernel_exact,t,s46,"t-s46",s46); b &= test_aux(is_kernel_exact,t,s65,"t-s65",s65); b &= test_aux(is_kernel_exact,t,s64,"t-s64",s64); b &= test_aux(is_kernel_exact,t,s48,"t-s48",s48); b &= test_aux(is_kernel_exact,t,s56,"t-s56",s56); b &= test_aux(is_kernel_exact,t,s17,"t-t17",s17); b &= test_aux(is_kernel_exact,t,s67,"t-t67",s67); b &= test_aux(is_kernel_exact,t,s68,"t-s68",s68); b &= test_aux(is_kernel_exact,t,s86,"t-s86",s86); b &= test_aux(is_kernel_exact,t,s78,"t-t78",s78); b &= test_aux(is_kernel_exact,t,s87,"t-t87",s87); // Outside points (in triangle plane) Point pA(FT(-0.5), FT(1.), FT(0.5)); Point pB(FT(0.5), FT(1.), FT(-0.5)); Point pC(FT(0.5), FT(-0.5), FT(1.)); Point pE(FT(1.), FT(-1.), FT(1.)); Point pF(FT(-1.), FT(0.), FT(2.)); Segment sAB(pA,pB); Segment sBC(pB,pC); Segment s2E(p2,pE); Segment sE2(pE,p2); Segment s2A(p2,pA); Segment s6E(p6,pE); Segment sB8(pB,p8); Segment sC8(pC,p8); Segment s8C(p8,pC); Segment s1F(p1,pF); Segment sF6(pF,p6); b &= test_aux(is_kernel_exact,t,sAB,"t-sAB",p2); b &= test_aux(is_kernel_exact,t,sBC,"t-sBC",s46); b &= test_aux(is_kernel_exact,t,s2E,"t-s2E",s26); b &= test_aux(is_kernel_exact,t,sE2,"t-sE2",s62); b &= test_aux(is_kernel_exact,t,s2A,"t-s2A",p2); b &= test_aux(is_kernel_exact,t,s6E,"t-s6E",p6); b &= test_aux(is_kernel_exact,t,sB8,"t-sB8",s48); b &= test_aux(is_kernel_exact,t,sC8,"t-sC8",s68); b &= test_aux(is_kernel_exact,t,s8C,"t-s8C",s86); b &= test_aux(is_kernel_exact,t,s1F,"t-s1F",s13); b &= test_aux(is_kernel_exact,t,sF6,"t-sF6",s36); // Outside triangle plane Point pa(FT(0.), FT(0.), FT(0.)); Point pb(FT(2.), FT(0.), FT(0.)); Point pc(FT(1.), FT(0.), FT(1.)); Point pe(FT(1.), FT(0.5), FT(0.5)); Segment sab(pa,pb); Segment sac(pa,pc); Segment sae(pa,pe); Segment sa8(pa,p8); Segment sb2(pb,p2); b &= test_aux(is_kernel_exact,t,sab,"t-sab",p1); b &= test_aux(is_kernel_exact,t,sac,"t-sac",p6); b &= test_aux(is_kernel_exact,t,sae,"t-sae",p8); b &= test_aux(is_kernel_exact,t,sa8,"t-sa8",p8); b &= test_aux(is_kernel_exact,t,sb2,"t-sb2",p2); // ----------------------------------- // ray queries // ----------------------------------- // Edges of t Ray r12(p1,p2); Ray r21(p2,p1); Ray r13(p1,p3); Ray r23(p2,p3); b &= test_aux(is_kernel_exact,t,r12,"t-r12",s12); b &= test_aux(is_kernel_exact,t,r21,"t-r21",s21); b &= test_aux(is_kernel_exact,t,r13,"t-r13",s13); b &= test_aux(is_kernel_exact,t,r23,"t-r23",s23); // In triangle Point p9_(FT(0.), FT(0.5), FT(0.5)); Point p9(FT(0.25), FT(0.375), FT(0.375)); Ray r14(p1,p4); Ray r41(p4,p1); Ray r24(p2,p4); Ray r42(p4,p2); Ray r15(p1,p5); Ray r25(p2,p5); Ray r34(p3,p4); Ray r35(p3,p5); Ray r36(p3,p6); Ray r45(p4,p5); Ray r16(p1,p6); Ray r26(p2,p6); Ray r62(p6,p2); Ray r46(p4,p6); Ray r48(p4,p8); Ray r56(p5,p6); Ray r47(p4,p7); Ray r89(p8,p9); Ray r86(p8,p6); Ray r68(p6,p8); Segment r89_res(p8,p9_); b &= test_aux(is_kernel_exact,t,r14,"t-r14",s12); b &= test_aux(is_kernel_exact,t,r41,"t-r41",s41); b &= test_aux(is_kernel_exact,t,r24,"t-r24",s21); b &= test_aux(is_kernel_exact,t,r42,"t-r42",s42); b &= test_aux(is_kernel_exact,t,r15,"t-r15",s15); b &= test_aux(is_kernel_exact,t,r25,"t-r25",s23); b &= test_aux(is_kernel_exact,t,r34,"t-r34",s34); b &= test_aux(is_kernel_exact,t,r35,"t-r35",s32); b &= test_aux(is_kernel_exact,t,r36,"t-r36",s31); b &= test_aux(is_kernel_exact,t,r45,"t-r45",s45); b &= test_aux(is_kernel_exact,t,r16,"t-r16",s13); b &= test_aux(is_kernel_exact,t,r26,"t-r26",s26); b &= test_aux(is_kernel_exact,t,r62,"t-r62",s62); b &= test_aux(is_kernel_exact,t,r46,"t-r46",s46); b &= test_aux(is_kernel_exact,t,r48,"t-r48",s46); b &= test_aux(is_kernel_exact,t,r56,"t-r56",s56); b &= test_aux(is_kernel_exact,t,r47,"t-r47",s45); b &= test_aux(is_kernel_exact,t,r89,"t-t89",r89_res); b &= test_aux(is_kernel_exact,t,r68,"t-r68",s64); b &= test_aux(is_kernel_exact,t,r86,"t-r86",s86); // Outside points (in triangre prane) Ray rAB(pA,pB); Ray rBC(pB,pC); Ray r2E(p2,pE); Ray rE2(pE,p2); Ray r2A(p2,pA); Ray r6E(p6,pE); Ray rB8(pB,p8); Ray rC8(pC,p8); Ray r8C(p8,pC); Ray r1F(p1,pF); Ray rF6(pF,p6); b &= test_aux(is_kernel_exact,t,rAB,"t-rAB",p2); b &= test_aux(is_kernel_exact,t,rBC,"t-rBC",s46); b &= test_aux(is_kernel_exact,t,r2E,"t-r2E",s26); b &= test_aux(is_kernel_exact,t,rE2,"t-rE2",s62); b &= test_aux(is_kernel_exact,t,r2A,"t-r2A",p2); b &= test_aux(is_kernel_exact,t,r6E,"t-r6E",p6); b &= test_aux(is_kernel_exact,t,rB8,"t-rB8",s46); b &= test_aux(is_kernel_exact,t,rC8,"t-rC8",s64); b &= test_aux(is_kernel_exact,t,r8C,"t-r8C",s86); b &= test_aux(is_kernel_exact,t,r1F,"t-r1F",s13); b &= test_aux(is_kernel_exact,t,rF6,"t-rF6",s31); // Outside triangle plane Ray rab(pa,pb); Ray rac(pa,pc); Ray rae(pa,pe); Ray ra8(pa,p8); Ray rb2(pb,p2); b &= test_aux(is_kernel_exact,t,rab,"t-rab",p1); b &= test_aux(is_kernel_exact,t,rac,"t-rac",p6); b &= test_aux(is_kernel_exact,t,rae,"t-rae",p8); b &= test_aux(is_kernel_exact,t,ra8,"t-ra8",p8); b &= test_aux(is_kernel_exact,t,rb2,"t-rb2",p2); // ----------------------------------- // Line queries // ----------------------------------- // Edges of t Line l12(p1,p2); Line l21(p2,p1); Line l13(p1,p3); Line l23(p2,p3); b &= test_aux(is_kernel_exact,t,l12,"t-l12",s12); b &= test_aux(is_kernel_exact,t,l21,"t-l21",s21); b &= test_aux(is_kernel_exact,t,l13,"t-l13",s13); b &= test_aux(is_kernel_exact,t,l23,"t-l23",s23); // In triangle Line l14(p1,p4); Line l41(p4,p1); Line l24(p2,p4); Line l42(p4,p2); Line l15(p1,p5); Line l25(p2,p5); Line l34(p3,p4); Line l35(p3,p5); Line l36(p3,p6); Line l45(p4,p5); Line l16(p1,p6); Line l26(p2,p6); Line l62(p6,p2); Line l46(p4,p6); Line l48(p4,p8); Line l56(p5,p6); Line l47(p4,p7); Line l89(p8,p9); Line l86(p8,p6); Line l68(p6,p8); Segment l89_res(p1,p9_); b &= test_aux(is_kernel_exact,t,l14,"t-l14",s12); b &= test_aux(is_kernel_exact,t,l41,"t-l41",s21); b &= test_aux(is_kernel_exact,t,l24,"t-l24",s21); b &= test_aux(is_kernel_exact,t,l42,"t-l42",s12); b &= test_aux(is_kernel_exact,t,l15,"t-l15",s15); b &= test_aux(is_kernel_exact,t,l25,"t-l25",s23); b &= test_aux(is_kernel_exact,t,l34,"t-l34",s34); b &= test_aux(is_kernel_exact,t,l35,"t-l35",s32); b &= test_aux(is_kernel_exact,t,l36,"t-l36",s31); b &= test_aux(is_kernel_exact,t,l45,"t-l45",s45); b &= test_aux(is_kernel_exact,t,l16,"t-l16",s13); b &= test_aux(is_kernel_exact,t,l26,"t-l26",s26); b &= test_aux(is_kernel_exact,t,l62,"t-l62",s62); b &= test_aux(is_kernel_exact,t,l46,"t-l46",s46); b &= test_aux(is_kernel_exact,t,l48,"t-l48",s46); b &= test_aux(is_kernel_exact,t,l56,"t-l56",s56); b &= test_aux(is_kernel_exact,t,l47,"t-l47",s45); b &= test_aux(is_kernel_exact,t,l89,"t-t89",l89_res); b &= test_aux(is_kernel_exact,t,l68,"t-l68",s64); b &= test_aux(is_kernel_exact,t,l86,"t-l86",s46); // Outside points (in triangle plane) Line lAB(pA,pB); Line lBC(pB,pC); Line l2E(p2,pE); Line lE2(pE,p2); Line l2A(p2,pA); Line l6E(p6,pE); Line lB8(pB,p8); Line lC8(pC,p8); Line l8C(p8,pC); Line l1F(p1,pF); Line lF6(pF,p6); b &= test_aux(is_kernel_exact,t,lAB,"t-lAB",p2); b &= test_aux(is_kernel_exact,t,lBC,"t-lBC",s46); b &= test_aux(is_kernel_exact,t,l2E,"t-l2E",s26); b &= test_aux(is_kernel_exact,t,lE2,"t-lE2",s62); b &= test_aux(is_kernel_exact,t,l2A,"t-l2A",p2); b &= test_aux(is_kernel_exact,t,l6E,"t-l6E",s26); b &= test_aux(is_kernel_exact,t,lB8,"t-lB8",s46); b &= test_aux(is_kernel_exact,t,lC8,"t-lC8",s64); b &= test_aux(is_kernel_exact,t,l8C,"t-l8C",s46); b &= test_aux(is_kernel_exact,t,l1F,"t-l1F",s13); b &= test_aux(is_kernel_exact,t,lF6,"t-lF6",s31); // Outside triangle plane Line lab(pa,pb); Line lac(pa,pc); Line lae(pa,pe); Line la8(pa,p8); Line lb2(pb,p2); b &= test_aux(is_kernel_exact,t,lab,"t-lab",p1); b &= test_aux(is_kernel_exact,t,lac,"t-lac",p6); b &= test_aux(is_kernel_exact,t,lae,"t-lae",p8); b &= test_aux(is_kernel_exact,t,la8,"t-la8",p8); b &= test_aux(is_kernel_exact,t,lb2,"t-lb2",p2); return b; }
/** The RadiusClass is C++ library for RADIUS authentication and accounting. * Features: * - Sending and Receiving RADIUS packets. * - Generates password and authentication packet fields at sending, * you only need to set the plain text password for the user for ACCESS_REQUEST packets * - password length optional * - timeouts for waiting on response packets * - sending retries if no response from server * - sending to optional number of servers: * - the first server from the config file is taken * - config parameter: e.g. wait=5 : wait 5s on a response * - config parameter: e.g. retry=2 : retry sending the packet 2 times after timeout * - if the first server do not response -> take the next server from config file * - extract attributes from the response packet, e.g. FramedIp or FramedRoutes * - functions to convert values from the response packets for integers and ip address as string (see function parseResponsePacket()) **/ int main_test (void) { list<RadiusServer> * serverlist; list<RadiusServer>::iterator server; //create RadiusPacket: you can already specify the type RadiusPacket packet_access(ACCESS_REQUEST); //the packets for accounting (start,update,stop) RadiusPacket packet_accounting_start(ACCOUNTING_REQUEST); RadiusPacket packet_accounting_update(ACCOUNTING_REQUEST); RadiusPacket packet_accounting_stop(ACCOUNTING_REQUEST); //create RadiusAttributes: you can specify type and value. RadiusAttribute ra1(ATTRIB_User_Name,"user1"), ra2(ATTRIB_User_Password), ra3(ATTRIB_NAS_Port,55), ra4(ATTRIB_Calling_Station_Id,"127.0.0.1"), ra5(ATTRIB_NAS_Identifier), ra6(ATTRIB_NAS_IP_Address), ra7(ATTRIB_NAS_Port_Type), ra8(ATTRIB_Service_Type), ra9(ATTRIB_Framed_IP_Address), ra10(ATTRIB_Acct_Session_ID, 99), //for accounting packet type (start/update/stop) ra11(ATTRIB_Acct_Status_Type), ra12(ATTRIB_Framed_Protocol), //for accounting update and stop packets ra13(ATTRIB_Acct_Input_Octets, 99), ra14(ATTRIB_Acct_Output_Octets, 10), ra15(ATTRIB_Acct_Session_Time, 12345), ra16(ATTRIB_Vendor_Specific); RadiusVendorSpecificAttribute rvsa; //read in the config RadiusConfig config(string("./exampleconfig")); cout << "*** Sampleprogramm for the RadiusClass. ***\n"; cout << "---- Print Config ----\n"; cout << config; cout << "-----------------------\n"; // Send a ACCEPT-REQUEST-PACKET cout << "-----------------------------------------------------\n"; cout << "-------- Send a ACCESS-REQUEST-PACKET ---------------\n"; cout << "-----------------------------------------------------\n"; /*set password (the method setValue() detects which type * the attribut is from, and converts the value correct for * this type) */ ra2.setValue(string("testing")); if(packet_access.addRadiusAttribute(&ra1)) { cerr << getTime() << "RADIUS-CLASS: Fail to add attribute ATTRIB_User_Name.\n"; } if (packet_access.addRadiusAttribute(&ra2)) { cerr << getTime() << "RADIUS-CLASS: Fail to add attribute ATTRIB_User_Password.\n"; } if (packet_access.addRadiusAttribute(&ra3)) { cerr << getTime() << "RADIUS-CLASS: Fail to add attribute ATTRIB_NAS_Port.\n"; } if (packet_access.addRadiusAttribute(&ra4)) { cerr << getTime() << "RADIUS-CLASS: Fail to add attribute ATTRIB_Calling_Station_Id.\n"; } //get information from the config and add it to the packet if(strcmp(config.getNASIdentifier(),"")) { ra5.setValue(config.getNASIdentifier()); if (packet_access.addRadiusAttribute(&ra5)) { cerr << getTime() << "RADIUS-CLASS: Fail to add attribute ATTRIB_NAS_Identifier.\n"; } } if(strcmp(config.getNASIpAddress(),"")) { if(ra6.setValue(config.getNASIpAddress())!=0) { cerr << getTime() << "RADIUS-CLASS: Fail to set value ATTRIB_NAS_Ip_Address.\n"; } else if (packet_access.addRadiusAttribute(&ra6)) { cerr << getTime() << "RADIUS-CLASS: Fail to add attribute ATTRIB_NAS_Ip_Address.\n"; } } if(strcmp(config.getNASPortType(),"")) { ra7.setValue(config.getNASPortType()); if (packet_access.addRadiusAttribute(&ra7)) { cerr << getTime() << "RADIUS-CLASS: Fail to add attribute ATTRIB_NAS_Port_Type.\n"; } } if(strcmp(config.getServiceType(),"")) { ra8.setValue(config.getServiceType()); if (packet_access.addRadiusAttribute(&ra8)) { cerr << getTime() << "RADIUS-CLASS: Fail to add attribute ATTRIB_Service_Type.\n"; } } //example for sending vendor specific attribute rvsa.setId(123); rvsa.setType(1); rvsa.setValue("Vendor Attribute"); //integers can be set directly //rvsa.setValue(1981); Octet * tmp_rvsa=new Octet[rvsa.getLength()+4]; rvsa.getShapedAttribute(tmp_rvsa); ra16.setValue((char *)tmp_rvsa); packet_access.addRadiusAttribute(&ra16); delete [] tmp_rvsa; //get the server list serverlist=config.getRadiusServer(); //check if there are servers try { if(serverlist->empty()==true) { throw(string("RADIUS-CLASS: No servers defined!")); } } catch(string) { cerr<< "No servers!"; //stop the programm if there are no server(s) in config return 0; } //set server to the first server server=serverlist->begin(); //send the packet to the first server from the list if (packet_access.radiusSend(server)<0) { cerr << getTime() << "RADIUS-CLASS: Packet was not send.\n"; } //receive the packet, if the server doesn't response send the packet to the next server in list. if (packet_access.radiusReceive(serverlist)==0) { //is it a accept? if(packet_access.getCode()==ACCESS_ACCEPT) { /*Parse the attributes for framedip, framedroutes and acctinteriminterval. This is only an example, so the function has no return values, the values are printed at stdout.*/ parseResponsePacket(&packet_access); } //If the radius server denied the access or sends a ACCESS_CHALLANGE-packet. else { cerr << getTime() << "RADIUS-CLASS: Get ACCESS_REJECT or ACCESS_CHALLANGE-Packet.->ACCESS-DENIED.\n"; } } else { cerr << getTime() << "RADIUS-CLASS: Got no or bad response from radius server.\n"; } // Send a ACCOUNTING-REQUEST-PACKET, Status-Type:Start cout << "-----------------------------------------------------\n"; cout << "-------- Send a ACCOUNTING-REQUEST-PACKET -----------\n"; cout << "-----------------Status-Type: Start------------------\n"; cout << "-----------------------------------------------------\n"; //add the attributes to the packet if(packet_accounting_start.addRadiusAttribute(&ra1)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_User_Name.\n"; } if (packet_accounting_start.addRadiusAttribute(&ra3)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_NAS_Port.\n"; } if (packet_accounting_start.addRadiusAttribute(&ra4)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Calling_Station_Id.\n"; } if (packet_accounting_start.addRadiusAttribute(&ra10)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Session_Id.\n"; } //set status type: start = 1 (see RADIUS RFC) ra11.setValue(string("1")); if (packet_accounting_start.addRadiusAttribute(&ra11)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Status_Type.\n"; } //get information from the config and add the attributes to the packet if(strcmp(config.getNASIdentifier(),"")) { ra5.setValue(config.getNASIdentifier()); if (packet_accounting_start.addRadiusAttribute(&ra5)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_NAS_Identifier.\n"; } } if(strcmp(config.getNASIpAddress(),"")) { if(ra6.setValue(config.getNASIpAddress())!=0) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to set value ATTRIB_NAS_Ip_Address.\n"; } if (packet_accounting_start.addRadiusAttribute(&ra6)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_NAS_Ip_Address.\n"; } } if(strcmp(config.getNASPortType(),"")) { ra7.setValue(config.getNASPortType()); if (packet_accounting_start.addRadiusAttribute(&ra7)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_NAS_Port_Type.\n"; } } if(strcmp(config.getServiceType(),"")) { ra8.setValue(config.getServiceType()); if (packet_accounting_start.addRadiusAttribute(&ra8)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Service_Type.\n"; } } if(strcmp(config.getFramedProtocol(),"")) { ra12.setValue(config.getFramedProtocol()); if (packet_accounting_start.addRadiusAttribute(&ra12)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_FramedProtocol.\n"; } } ra9.setValue(string("111.222.111.111")); if (packet_accounting_start.addRadiusAttribute(&ra9)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Acct_Session_ID.\n"; } //send the packet_accounting_start if (packet_accounting_start.radiusSend(server)<0) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Packet was not send.\n"; } //receive the response if (packet_accounting_start.radiusReceive(serverlist)>=0) { //is is a accounting resopnse ? if(packet_accounting_start.getCode()==ACCOUNTING_RESPONSE) { cerr << getTime() << "RADIUS-CLASS: Get ACCOUNTING_RESPONSET-Packet.\n"; } } else { cerr << getTime() << "RADIUS-CLASS: Got no or bad response from radius server.\n"; } // Send a ACCOUNTING-REQUEST-PACKET, Status-Type:Update cout << "-----------------------------------------------------\n"; cout << "-------- Send a ACCOUNTING-REQUEST-PACKET -----------\n"; cout << "-----------------Status-Type: Update-----------------\n"; cout << "-----------------------------------------------------\n"; //add the attributes to the packet if(packet_accounting_update.addRadiusAttribute(&ra1)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_User_Name.\n"; } if (packet_accounting_update.addRadiusAttribute(&ra3)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_NAS_Port.\n"; } if (packet_accounting_update.addRadiusAttribute(&ra4)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Calling_Station_Id.\n"; } if (packet_accounting_update.addRadiusAttribute(&ra10)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Session_Id.\n"; } //set status type: update = 3(see RADIUS RFC) ra11.setValue(string("3")); if (packet_accounting_update.addRadiusAttribute(&ra11)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Status_Type.\n"; } if (packet_accounting_update.addRadiusAttribute(&ra13)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Acct_Input_Octets.\n"; } if (packet_accounting_update.addRadiusAttribute(&ra14)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Acct_Output_Octets.\n"; } if (packet_accounting_update.addRadiusAttribute(&ra14)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Acct_Session_Time.\n"; } //get information from the config and add the attributes to the packet if(strcmp(config.getNASIdentifier(),"")) { ra5.setValue(config.getNASIdentifier()); if (packet_accounting_update.addRadiusAttribute(&ra5)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_NAS_Identifier.\n"; } } if(strcmp(config.getNASIpAddress(),"")) { if(ra6.setValue(config.getNASIpAddress())!=0) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to set value ATTRIB_NAS_Ip_Address.\n"; } if (packet_accounting_update.addRadiusAttribute(&ra6)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_NAS_Ip_Address.\n"; } } if(strcmp(config.getNASPortType(),"")) { ra7.setValue(config.getNASPortType()); if (packet_accounting_update.addRadiusAttribute(&ra7)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_NAS_Port_Type.\n"; } } if(strcmp(config.getServiceType(),"")) { ra8.setValue(config.getServiceType()); if (packet_accounting_update.addRadiusAttribute(&ra8)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Service_Type.\n"; } } if(strcmp(config.getFramedProtocol(),"")) { ra12.setValue(config.getFramedProtocol()); if (packet_accounting_update.addRadiusAttribute(&ra12)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_FramedProtocol.\n"; } } ra9.setValue(string("111.222.111.111")); if (packet_accounting_update.addRadiusAttribute(&ra9)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Acct_Session_ID.\n"; } //send the packet_accounting_update if (packet_accounting_update.radiusSend(server)<0) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Packet was not send.\n"; } //receive the response if (packet_accounting_update.radiusReceive(serverlist)>=0) { //is is a accounting resopnse ? if(packet_accounting_update.getCode()==ACCOUNTING_RESPONSE) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Get ACCOUNTING_RESPONSET-Packet.\n"; } } else { cerr << getTime() << "RADIUS-CLASS: Got no or bad response from radius server.\n"; } // Send a ACCOUNTING-REQUEST-PACKET, Status-Type:Stop cout << "-----------------------------------------------------\n"; cout << "-------- Send a ACCOUNTING-REQUEST-PACKET -----------\n"; cout << "-----------------Status-Type: Stop-------------------\n"; cout << "-----------------------------------------------------\n"; //add the attributes to the packet if(packet_accounting_stop.addRadiusAttribute(&ra1)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_User_Name.\n"; } if (packet_accounting_stop.addRadiusAttribute(&ra3)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_NAS_Port.\n"; } if (packet_accounting_stop.addRadiusAttribute(&ra4)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Calling_Station_Id.\n"; } if (packet_accounting_stop.addRadiusAttribute(&ra10)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Session_Id.\n"; } //set status type: update = 2(see RADIUS RFC) ra11.setValue(string("2")); if (packet_accounting_stop.addRadiusAttribute(&ra11)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Status_Type.\n"; } if (packet_accounting_stop.addRadiusAttribute(&ra13)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Acct_Input_Octets.\n"; } if (packet_accounting_stop.addRadiusAttribute(&ra14)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Acct_Output_Octets.\n"; } if (packet_accounting_stop.addRadiusAttribute(&ra14)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Acct_Session_Time.\n"; } //get information from the config and add the attributes to the packet if(strcmp(config.getNASIdentifier(),"")) { ra5.setValue(config.getNASIdentifier()); if (packet_accounting_stop.addRadiusAttribute(&ra5)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_NAS_Identifier.\n"; } } if(strcmp(config.getNASIpAddress(),"")) { if(ra6.setValue(config.getNASIpAddress())!=0) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to set value ATTRIB_NAS_Ip_Address.\n"; } if (packet_accounting_stop.addRadiusAttribute(&ra6)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_NAS_Ip_Address.\n"; } } if(strcmp(config.getNASPortType(),"")) { ra7.setValue(config.getNASPortType()); if (packet_accounting_stop.addRadiusAttribute(&ra7)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_NAS_Port_Type.\n"; } } if(strcmp(config.getServiceType(),"")) { ra8.setValue(config.getServiceType()); if (packet_accounting_stop.addRadiusAttribute(&ra8)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Service_Type.\n"; } } if(strcmp(config.getFramedProtocol(),"")) { ra12.setValue(config.getFramedProtocol()); if (packet_accounting_stop.addRadiusAttribute(&ra12)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_FramedProtocol.\n"; } } ra9.setValue(string("111.222.111.111")); if (packet_accounting_stop.addRadiusAttribute(&ra9)) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Fail to add attribute ATTRIB_Acct_Session_ID.\n"; } //send the packet_accounting_stop if (packet_accounting_stop.radiusSend(server)<0) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Packet was not send.\n"; } //receive the response if (packet_accounting_stop.radiusReceive(serverlist)>=0) { //is is a accounting resopnse ? if(packet_accounting_stop.getCode()==ACCOUNTING_RESPONSE) { cerr << getTime() << "RADIUS-CLASS: BACKGROUND-ACCT: Get ACCOUNTING_RESPONSET-Packet.\n"; } } else { cerr << getTime() << "RADIUS-CLASS: Got no or bad response from radius server.\n"; } cout << "\n---- End ----"; return (0); }