WriteFile.cpp

См. документацию.
00001 /*
00002  * WriteFile.cpp
00003  *
00004  *  Created on: 12.06.2011
00005  *      Author: nick
00006  */
00007 
00008 #include "WriteFile.h"
00009 /*
00010 <iq type="set" id="идентификатор" to="ip сервера">
00011         <query xmlns="write-file">
00012                 <readargs xmlns="write-file#args" path="путь к файлу или папке" offset="XXXXX" size="XXXXX"/>
00013                 <fileinfo xmlns="file-info">
00014                         <flags xmlns="file-info#flags">XXXX</flags>
00015                 </fileinfo>
00016         </query>
00017 </iq>
00018 
00019 <iq from="ip сервера" to="ip клиента" type="get" id="идентификатор">
00020         <query xmlns="write-file">
00021                 <patckets_id>XXXX</patckets_id>
00022                 <size>XXXXX</size>
00023         </query>
00024 </iq>
00025 
00026 <iq from='ip клиента' to="ip сервера" type="result" id="идентификатор">
00027         <query xmlns="write-file"/>
00028 </iq>
00029 
00030 */
00031 
00032 WriteFile::WriteFile(Node* parent,string from, string to, IQType type, string id):
00033                                 TagIQ(parent,from, to, type, id,WriteFile_xmlns) {
00034 
00035 }
00036 
00037 void WriteFile::setSubmite(){
00038         setType(TagIQ::Result);
00039 }
00040 
00041 void WriteFile::getResult(unsigned int &packetid, size_t &size_for_read){
00042         Node* subNode=this->getKind(WriteFile_xmlns);
00043         Node* n=subNode->getKind(WriteFile_xmlnsResultPID);
00044         packetid=n->getXMLBodyInt();
00045         n=subNode->getKind(WriteFile_xmlnsResultSize);
00046         size_for_read=n->getXMLBodyInt();
00047 }
00048 
00049 void WriteFile::setResult(unsigned int packetid, size_t size_for_read){
00050         setType(TagIQ::Get);
00051         Node* subNode=this->getKind(WriteFile_xmlns);
00052         Node* n=new Node("pct_id",subNode,WriteFile_xmlnsResultPID);
00053         n->setXMLBody(packetid);
00054         n=new Node("pct_sz",subNode,WriteFile_xmlnsResultSize);
00055         n->setXMLBody(size_for_read);
00056 }
00057 
00058 void WriteFile::getFileData(string &path, size_t &offset, size_t &size,  fuse_file_info &fi){
00059         memset(&fi,0,sizeof(fi));
00060         Node* subNode=this->getKind(WriteFile_xmlns);
00061         Node* args = subNode->getKind(WriteFileArgs_xmlns);
00062         path=args->getAttribute("path");
00063         offset=args->getAttributeInt("offset");
00064         size=args->getAttributeInt("size");
00065         FileInfoSubtag fis(*subNode->getKind(FileInfo_xmlns));//= new FileInfoSubtag(subNode);
00066         fi=fis.getFileInfo();
00067 }
00068 
00069 void WriteFile::setFileData(const string &path, size_t offset, size_t size, const fuse_file_info &fi){
00070         setType(TagIQ::Set);
00071         Node* subNode=this->getKind(WriteFile_xmlns);
00072         Node* args =new Node("readargs",subNode,WriteFileArgs_xmlns);
00073         args->setAttribute("path",path);
00074         args->setAttribute("offset",offset);
00075         args->setAttribute("size",size);
00076         FileInfoSubtag* fis= new FileInfoSubtag(subNode);
00077         fis->setFileInfo(fi);
00078 }
00079 
00080 WriteFile::WriteFile(const Node &basedNode):TagIQ(basedNode) {
00081         // TODO Auto-generated constructor stub
00082     #ifdef debug_output
00083         cout<<"=======getattr constructor copy======"<<endl;
00084     #endif
00085 }
00086 
00087 WriteFile::~WriteFile() {
00088         // TODO Auto-generated destructor stub
00089 }