MTK-Socket数据存储联网_第1页
MTK-Socket数据存储联网_第2页
MTK-Socket数据存储联网_第3页
MTK-Socket数据存储联网_第4页
MTK-Socket数据存储联网_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

NetworkServiceYao.wen2024/5/28Copyright©MediaTekInc.Allrightsreserved.1AgendaCBMOverviewCBMOverviewCBMAPIsSampleCodeSocketOverviewSocketOverviewSocketAPIsSampleCodeWPSOverviewWPSOverviewWPSMessagesSampleCodeCBM2024/5/28Copyright©MediaTekInc.Allrightsreserved.3CBMOverviewCBMprovidesasetofAPIsthatallinternetapplicationscouldregister/deregisterappidandencode/decodeapp_id,siminfofrom/intoDataaccountID.TheseAPIsarethread-safed,theycouldbecalledbyanytask.2024/5/28Copyright©MediaTekInc.Allrightsreserved.4CommonDataAccountSelectingScreenmmi_dtcnt_select_account_option_with_id()willlaunchthisscreenWhenuserselectanaccount,applicationwillgettheselectedaccountidfromcallbackfunction2024/5/28Copyright©MediaTekInc.Allrightsreserved.5CBMAPIs2024/5/28Copyright©MediaTekInc.Allrightsreserved.6CBMAPIs2024/5/28Copyright©MediaTekInc.Allrightsreserved.7CodingGuideRegisterapp_idg_app_id=cbm_register_app_id(APP_STR_ID,APP_ICON_ID);

/*Registerapp_id*/LaunchDataAccountScreenmmi_dtcnt_select_account_option_with_id(

data_account_callback, /*CallbackFunctions*/ MENU_ID_APP, /*MenuID*/ DATA_ACCOUNT_BEARER_GPRS|DATA_ACCOUNT_BEARER_WIFI,/*Bearer*/ 0, /*DTCNT_SELECT_SIM:DualSIMsupported,0:don’tsupportdualSIM*/ g_app_id, /*app_idfromstep1*/

0); /*DefaultselectedaccountinMMIscreen*/data_account_callback(U32index)

/*indexuserselected*/{

mmi_dtcnt_get_account_name(index,buf,len);/*AccountNameforDisplay*/

g_data_account_id

=

index;}CreateSocketandMakeConnectionsoc_create(...,g_data_account_id);

/*Createsocketandmakeconnections*/Socket2024/5/28Copyright©MediaTekInc.Allrightsreserved.9TheSocketmoduleprovidesaSocketAPIforapplications,e.g.,WAP,Email,etc.TheSocketAPIconsistsofseveralfunctioncalls.Eachfunctionisimplementedinthewayofthread-safeandreentrant.SocketAPIislargelybasedonBerkeleySocketAPI.SocketOverview2024/5/28Copyright©MediaTekInc.Allrightsreserved.10SocketOverviewLayeringSocketApplications(e.g.,WAP,Email)SocketLayer(SOCtask)ProtocolLayer(TCPIPtask:TCP,UDP,IP,ICMP,ARP)BearerLayer(PPP,TCM,WNDRV)CBM(CentralBearerManagement)WAPSOCTCPIPPPPTCMWNDRVEmailCBM2024/5/28Copyright©MediaTekInc.Allrightsreserved.11SocketModeSocketblocking(default)modeSocketnon-blockingmodeNon-blocking+Asynchronousnotificationmode2024/5/28Copyright©MediaTekInc.Allrightsreserved.12Blockingmode2024/5/28Copyright©MediaTekInc.Allrightsreserved.13Non-blockingmodeApplicationSocketTCP/IPsoc_recvRECV_IND(returnSOC_WOULDBLOCK)querybyapplicationnodataavailablesoc_recv(returndata)2024/5/28Copyright©MediaTekInc.Allrightsreserved.14AsynchronousnotificationmodeApplicationSocketTCP/IPsoc_recvRECV_IND(returnSOC_WOULDBLOCK)applicationwillnotbeblockednodataavailablesoc_recvAPP_SOC_NOTIFY_IND(SOC_READ)2024/5/28Copyright©MediaTekInc.Allrightsreserved.15SOC–APPSAPSOCAPPAPP_SOC_GET_HOST_BY_NAME_INDAPP_SOC_GET_HOST_BY_ADDR_INDAPP_SOC_NOTIFY_INDsoc_create,soc_bind,soc_connectsoc_send,soc_sendtosoc_recv,soc_recvfromsoc_getsockopt,soc_setsockoptsoc_gethostbyname,soc_gethostbyname2soc_gethostbyaddrsoc_get_account_localipsoc_getsockaddrsoc_get_last_errorsoc_close,2024/5/28Copyright©MediaTekInc.Allrightsreserved.16MessageAPP_SOC_GET_HOST_BY_NAME_INDAPP_SOC_GET_HOST_BY_ADDR_INDAPP_SOC_NOTIFY_IND2024/5/28Copyright©MediaTekInc.Allrightsreserved.17PrimitivesAPP_SOC_GET_HOST_BY_NAME_INDResponseofsoc_gethostbyname()Fields:addr:returnedIPaddressaddr_len:returnedIPaddresslengthaccess_id:setinsoc_gethostbyname()APP_SOC_GET_HOST_BY_NAME_INDAPP_SOC_GET_HOST_BY_ADDR_INDAPP_SOC_NOTIFY_IND2024/5/28Copyright©MediaTekInc.Allrightsreserved.18PrimitivesAPP_SOC_GET_HOST_BY_ADDR_INDResponseofsoc_gethostbyaddr()Fields:name:returneddomainname(nullterminated)access_id:setinsoc_gethostbyaddr()APP_SOC_GET_HOST_BY_NAME_INDAPP_SOC_GET_HOST_BY_ADDR_INDAPP_SOC_NOTIFY_IND2024/5/28Copyright©MediaTekInc.Allrightsreserved.19PrimitivesAPP_SOC_NOTIFY_INDUsedtogivenotificationsofnetworkeventsFieldsevent_type:SOC_READ Notifytoread SOC_WRITE Notifytowrite SOC_ACCEPT Notifytoaccept SOC_CONNECT Notifytoconnect SOC_CLOSE Notifytocloseresult:IndicateCONNECTsucceedornoterror_causeAPP_SOC_GET_HOST_BY_NAME_INDAPP_SOC_GET_HOST_BY_ADDR_INDAPP_SOC_NOTIFY_IND2024/5/28Copyright©MediaTekInc.Allrightsreserved.20Functionssoc_createTocreateasocketFields:domain: Currently,onlyPF_INETsupported

type: SOCK_STREAM/SOCK_DGRAMprotocol: Shallsettozeromod_id: MOD_GISnwk_account_id: NetworkaccountidReturn:>=0 socket_id<0 errorInfo:Blockingsoc_create,soc_bindsoc_connectsoc_send,soc_sendtosoc_recv,soc_recvfromsoc_setsockopt/soc_getsockoptsoc_gethostbynamesoc_gethostbyname2soc_get_last_errorsoc_get_account_localipsoc_ip_check,soc_close2024/5/28Copyright©MediaTekInc.Allrightsreserved.21Functionssoc_bindTobindalocalipaddresstoasocketFields:s: socket_idaddr: localipaddress,portReturn:0: success<0: failInfo:Blockingsoc_create,soc_bindsoc_connectsoc_send,soc_sendtosoc_recv,soc_recvfromsoc_setsockopt/soc_getsockoptsoc_gethostbynamesoc_gethostbyname2soc_get_last_errorsoc_get_account_localipsoc_ip_check,soc_close2024/5/28Copyright©MediaTekInc.Allrightsreserved.22Functionssoc_connectToconnecttoaspecifiedremoteserverFields:s: socket_idaddr: ipaddrress,portReturns:SOC_WOULDBLOCK inprogressingSOC_ALREADY alreadyconnectedOthers failsoc_create,soc_bindsoc_connectsoc_send,soc_sendtosoc_recv,soc_recvfromsoc_setsockopt/soc_getsockoptsoc_gethostbynamesoc_gethostbyname2soc_get_last_errorsoc_get_account_localipsoc_ip_check,soc_close2024/5/28Copyright©MediaTekInc.Allrightsreserved.23Functionssoc_send,soc_sendtoTosenddatatoaspecifiedremoteserverFields:s: socket_idbuf: bufferpointertodatalen: lengthofbuffertoaddr: ipaddress,port(onlyforsoc_sendto)Returns:>0 numberofbytessentSOC_WOULDBLOCK inprogressothers failsoc_create,soc_bindsoc_connectsoc_send,soc_sendtosoc_recv,soc_recvfromsoc_setsockopt/soc_getsockoptsoc_gethostbynamesoc_gethostbyname2soc_get_last_errorsoc_get_account_localipsoc_ip_check,soc_close2024/5/28Copyright©MediaTekInc.Allrightsreserved.24Functionssoc_recv,soc_recvfromToreceivedata(andreturnthesourceaddress)Fields:s: socket_idbuf: bufferpointertodatalen: lengthofbuffer*fromaddr: ipaddress,port(onlyforsoc_recvfrom)Returns:>0 numberofbytesreceivedSOC_WOULDBLOCK inprogressothers failInfo:NeedtocalliterativelytillreturnsSOC_WOULDBLOCKsoc_create,soc_bindsoc_connectsoc_send,soc_sendtosoc_recv,soc_recvfromsoc_setsockopt/soc_getsockoptsoc_gethostbynamesoc_gethostbyname2soc_get_last_errorsoc_get_account_localipsoc_ip_check,soc_close2024/5/28Copyright©MediaTekInc.Allrightsreserved.25Functionssoc_setsockopt/soc_getsockoptToset(get)optionsonsockets.Fields:s: socket_idoption: option_type(soc_option_enum)val: optionvaluevalsize: sizeoftheoptionvalueReturns:0 success<0 failsoc_create,soc_bindsoc_connectsoc_send,soc_sendtosoc_recv,soc_recvfromsoc_setsockopt/soc_getsockoptsoc_gethostbynamesoc_gethostbyname2soc_get_last_errorsoc_get_account_localipsoc_ip_check,soc_close2024/5/28Copyright©MediaTekInc.Allrightsreserved.26SocketOptionsSOC_NBIOSettonon-blockingmodeSOC_ASYNCSpecifytheeventsapplicationwantstoreceive.SOC_READ/SOC_WRITE/SOC_CONNECT/SOC_CLOSESOC_UDP_ANY_FPORTForaconnectedUDPsocket,thosepacketsfromthesameremoteaddressbutdifferentportwillalsobeaccepted.soc_create,soc_bindsoc_connectsoc_send,soc_sendtosoc_recv,soc_recvfromsoc_setsockopt/soc_getsockoptsoc_gethostbynamesoc_gethostbyname2soc_close_nwk_accountsoc_close_nwk_account_by_idsoc_get_last_errorsoc_get_account_localipsoc_ip_check,soc_close2024/5/28Copyright©MediaTekInc.Allrightsreserved.27Functionssoc_gethostbynameTogetipaddressbygivingdomainnameFields:is_blocking onlynon-blockingsupportedmod_id MOD_GISrequest_id todistinguishdifferentDNSrequestdomain_name*addr/*addr_len returnedipaddressandlengthaccess_id embededinGET_HOST_BY_NAME_INDnwk_account_id networkaccountidReturns:0 successSOC_WOULDBLOCK Inprogressothers failsoc_create,soc_bindsoc_connectsoc_send,soc_sendtosoc_recv,soc_recvfromsoc_setsockopt/soc_getsockoptsoc_gethostbynamesoc_gethostbyname2soc_get_last_errorsoc_get_account_localipsoc_ip_check,soc_close2024/5/28Copyright©MediaTekInc.Allrightsreserved.28Functionssoc_gethostbyname2TogetipaddressesbygivingdomainnameFields:is_blocking onlynon-blockingsupported*addr/*addr_len returnedipaddresses,lengthin_entry_num Maxallowednumberofreturnentries*out_entry_num NumberofreturnedentriesReturns:0 successSOC_WOULDBLOCK inprogressothers failsoc_create,soc_bindsoc_connectsoc_send,soc_sendtosoc_recv,soc_recvfromsoc_setsockopt/soc_getsockoptsoc_gethostbynamesoc_gethostbyname2soc_get_last_errorsoc_get_account_localipsoc_ip_check,soc_close2024/5/28Copyright©MediaTekInc.Allrightsreserved.29Functionssoc_get_last_errorTogetthelastnetworkerror.Fields:s: socket_iderror: SOC_BEARER_FAIL/othersdeatil_cause: detailederrorReturns:0 success<0 failsoc_create,soc_bindsoc_connectsoc_send,soc_sendtosoc_recv,soc_recvfromsoc_setsockopt/soc_getsockoptsoc_gethostbynamesoc_gethostbyname2soc_get_last_errorsoc_get_account_localipsoc_ip_check,soc_close2024/5/28Copyright©MediaTekInc.Allrightsreserved.30Functionssoc_get_account_localipTogetthelocalIPaddressofthesocketFields:s: socket_id*local_ip: returnedipaddressReturnes:0 success<0 failsoc_create,soc_bindsoc_connectsoc_send,soc_sendtosoc_recv,soc_recvfromsoc_setsockopt/soc_getsockoptsoc_gethostbynamesoc_gethostbyname2soc_get_last_errorsoc_get_account_localipsoc_ip_check,soc_close2024/5/28Copyright©MediaTekInc.Allrightsreserved.31Functionssoc_ip_checkTocheckiftheinputstringinthevalidformof IPaddress.Fields:asci_addr: domainnameorIPaddress*ip_addr: returnedIPaddress(inbyteformat)*ip_validity theresultofcheckReturns:KAL_TRUEanIPaddressKAL_FALSE notanIPaddresssoc_create,soc_bindsoc_connectsoc_send,soc_sendtosoc_recv,soc_recvfromsoc_setsockopt/soc_getsockoptsoc_gethostbynamesoc_gethostbyname2soc_get_last_errorsoc_get_account_localipsoc_ip_check,soc_close2024/5/28Copyright©MediaTekInc.Allrightsreserved.32Functionssoc_closeTocloseasocketFieldss: socket_idReturns:0 success<0 failInfo:closethesocketsoc_create,soc_bindsoc_connectsoc_send,soc_sendtosoc_recv,soc_recvfromsoc_setsockopt/soc_getsockoptsoc_gethostbynamesoc_gethostbyname2soc_get_last_errorsoc_get_account_localipsoc_ip_check,soc_close2024/5/28Copyright©MediaTekInc.Allrightsreserved.33SamplecodeSocketUsageSampleCodes(Clientside):/*createsocket*/handle=soc_create(SOC_PF_INET,SOC_SOCK_STREAM,0,MOD_JAYSN,nwk_acct_id);if(handle<0){

return-1;}/*setsocketoption*/option=SOC_READ|SOC_WRITE|SOC_ACCEPT|SOC_CONNECT|SOC_CLOSE;result=soc_setsockopt(handle,SOC_ASYNC,&option,sizeof(kal_uint8));option=KAL_TRUE;result=soc_setsockopt(handle,SOC_NBIO,&option,sizeof(option));/*addressisinthenetworkbyteorder*/result=soc_connect((kal_int8)handle,&addr);if(result==SOC_WOULDBLOCK){/*waitfortheAPP_SOC_NOTIFY_IND(SOC_CONNECT)*/}2024/5/28Copyright©MediaTekInc.Allrightsreserved.34SamplecodeSocketUsageSampleCodes(Serverside):sockaddr_structaddr;Kal_mem_set(&addr,0x00,sizeof(addr));addr.addr_len=0x04;addr.port=xx;if((socket_id=soc_create(PF_INET,SOCK_STREAM,0,MOD_SIP,network_id))<0){returnERROR;}soc_setsockopt(socket_id,SOC_NBIO,&val,sizeof(val));val=SOC_READ|SOC_WRITE|SOC_CLOSE|SOC_ACCEPT;soc_setsockopt(socket_id,SOC_ASYNC,&val,sizeof(val));ret=soc_bind(socket_id,&addr);if(ret<0){soc_close(socket_id);returnERROR;}ret=soc_listen(socket_id,5);if(ret<0){soc_close(socket_id);returnERROR;}WPS2024/5/28Copyright©MediaTekInc.Allrightsreserved.36WPSOverviewWAP2.0ProtocolService(WPS)providesinterfaceforapplicationthatneedstocommunicatewithWAPgateway,HTTPproxy/serverthroughWAP2.0protocolstackChannelSetup:ConfigureaspecificchanneltohandleHTTP/WSPrequestHTTPandWSPrequest:SendHTTP/WSPrequestforapplicationReceiveHTTP/WSPresponseforapplicationCacheandcookieclearrequest:Clearcacheorcookie,whichissharedbyallusers2024/5/28Copyright©MediaTekInc.Allrightsreserved.37WPSOverviewApplicationApplicationAdaptationmoduleServicemoduleSecurity

ServiceWAPHTTP

StackWPSModuleWPSTaskSocketTaskPrimitivesFunctioncallsoc_create,soc_close,soc_connect,soc_send,soc_sendto,soc_recv,soc_recvfrom…APP_SOC_GET_HOST_BY_NAME_INDAPP_SOC_GET_HOST_BY_ADDR_INDAPP_SOC_NOTIFY_INDMSG_ID_WPS_SET_CHANNEL_REQMSG_ID_WPS_HTTP_REQMSG_ID_WPS_READ_CONTENT_REQMSG_ID_WPS_SET_CHANNEL_RSPMSG_ID_WPS_HTTP_RSPMSG_ID_WPS_READ_CONTENT_RSP2024/5/28Copyright©MediaTekInc.Allrightsreserved.38WPSMessage2024/5/28Copyright©MediaTekInc.Allrightsreserved.39WPSMessage2024/5/28Copyright©MediaTekInc.Allrightsreserved.40WPSMessage2024/5/28Copyright©MediaTekInc.Allrightsreserved.41MSG_ID_WPS_SET_CHANNEL_REQ

LocalParameter

wps_set_channel_req_struct

2024/5/28Copyright©MediaTekInc.Allrightsreserved.42MSG_ID_WPS_SET_CHANNEL_REQ

Peerbufferwps_set_channel_req_struct

Ifapplicationdoesn’tspecifyStatic_header,thenWPSwillusethevaluecurrentlyusedbyWAPStatic_header(ifnecessary)mustbefilledinwps_set_channel_req_var_structandthenpackedinpeerbufferbywps_pun_var_part()beforesendingtoWPS.Static_headerwillbeusedintheheaderwhenestablishingWSPsessionwhenconn_typeisWSP_CONN_TYPE_WSP_COand

thefirstWSPrequestofsomededicatedchannelwith

connectiontypeWSP_CONN_TYPE_WSP_CL.2024/5/28Copyright©MediaTekInc.Allrightsreserved.43MSG_ID_WPS_HTTP_REQ

LocalParameterwps__req_struct

2024/5/28Copyright©MediaTekInc.Allrightsreserved.44MSG_ID_WPS_HTTP_REQ

PeerBufferwps__req_var_struct2024/5/28Copyright©MediaTekInc.Allrightsreserved.45MSG_ID_WPS_READ_CONTENT_REQ

LocalParameter

wps_read_content_req_struct2024/5/28Copyright©MediaTekInc.Allrightsreserved.46MSG_ID_WPS_POST_CONTENT_RES

LocalParameterwps_post_content_res_struct2024/5/28Copyright©MediaTekInc.Allrightsreserved.47MSG_ID_WPS_POST_CONTENT_RES

PeerBufferwps_post_content_res_var_struct

2024/5/28Copyright©MediaTekInc.Allrightsreserved.48MessageFlow:GETScenario:applicationwantstogetafileusingWPSserviceStep1:setupachannelStep2:sendtheHTTPrequestStep3:receivethereplyStep4:RemovethechannelInvolvedILM:MSG_ID_WPS_SET_CHANNEL_REQMSG_ID_WPS_SET_CHANNEL_RSPMSG_ID_WPS_HTTP_REQMSG_ID_WPS_HTTP_RSPMSG_ID_WPS_READ_CONTENT_REQMSG_ID_WPS_READ_CONTENT_RSPMSG_ID_WPS_UNSET_CHANNEL_REQMSG_ID_WPS_UNSET_CHANNEL_RSP2024/5/28Copyright©MediaTekInc.Allrightsreserved.49ApplicationMSG_ID_WPS_SET_CHANNEL_REQMSG_ID_WPS_SET_CHANNEL_RSPMSG_ID_WPS_HTTP_REQMessageFlow:GET

--Step1:setupachannel

--Step2:sendtheHTTPrequestWPS2024/5/28Copyright©MediaTekInc.Allrightsreserved.50MessageFlow:GET

--Step3:receivethereplyWPSMSG_ID_WPS_HTTP_RSP,more=1MSG_ID_WPS_READ_CONTENT_REQ,seq_num=1MSG_ID_WPS_READ_CONTENT_RSP,seq_num=1,more=1MSG_ID_WPS_READ_CONTENT_REQ,seq_num=2MSG_ID_WPS_READ_CONTENT_RSP,seq_num=2,more=0Application2024/5/28Copyright©MediaTekInc.Allrightsreserved.51MessageFlow:GET

--Step4:removethechannelWPSMSG_ID_WPS_UNSET_CHANNEL_REQMSG_ID_WPS_UNSET_CHANNEL_RSPApplication2024/5/28Copyright©MediaTekInc.Allrightsreserved.52MessageFlow:POSTScenario:applicationwantstopostdatausingWPSserviceStep1:setupachannelStep2:sendtheHTTPrequestStep3:postdataStep4:RemovethechannelInvolvedILM:MSG_ID_WPS_SET_CHANNEL_REQMSG_ID_WPS_SET_CHANNEL_RSPMSG_ID_WPS_HTTP_REQMSG_ID_WPS_HTTP_RSPMSG_ID_WPS_POST_CONTENT_INDMSG_ID_WPS_POST_CONTENT_RESMSG_ID_WPS_UNSET_CHANNEL_REQMSG_ID_WPS_UNSET_CHANNEL_RSP2024/5/28Copyright©MediaTekInc.Allrightsreserved.53ApplicationWPSMSG_ID_WPS_POST_CONTENT_IND,seq_num=1MSG_ID_WPS_POST_CONTENT_RES,seq_num=1,more_post=1MSG_ID_WPS_HTTP_REQ,more_post=1MSG_ID_WPS_POST_CONTENT_IND,seq_num=2MSG_ID_WPS_POST_CONTENT_RES,seq_num=2,more_post=0MessageFlow:POST

--Step2:sendtheHTTPrequest2024/5/28Copyright©MediaTekInc.Allrightsreserved.54Functionwps_pun_var_partThisfunctionisusedtopack/unpackthefollowingpeerbufferstructofthoseprimitiveswithvariablelengthparameterFields:Op,WPS_PUN_PACK,WPS_PUN_UNPACK,WPS_PUN_SIZEmsg_id*p,*buf,Msg_idInfo:MSG_ID_WPS_SET_CHANNEL_REQ:wps_set_channel_req_var_structMSG_ID_WPS_HTTP_REQ:wps__req_var_structMSG_ID_WPS_HTTP_RSP:wps__rsp_var_structMSG_ID_WPS_READ_CONTENT_RSP:wps_read_content_rsp_var_structMSG_ID_WPS_POST_CONTENT_RES:wps_post_content_res_var_structMSG_ID_WPS_CLEAR_REQ:wps_clear_req_var_struct2024/5/28Copyright©MediaTekInc.Allrightsreserved.55Samplecode//USEMSG_ID_WPS_HTTP_REQvoidwps_send__req(void)//sendMSG_ID_WPS_HTTP_REQ{ilm_struct*ilm_ptr=NULL;wps__req_struct*_req;peer_buff_struct*peer_buff_ptr;wps__req_var_struct_req_var;kal_uint16pdu_length;

charurl[]="://kimo.tw/";_req=(wps__req_struct*)construct_local_para(sizeof(wps__req_struct),TD_CTRL);_req->channel_id=0;_req->request_id=0;_req->metho

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论