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

提交評論