the rest of the patchserver packets
This commit is contained in:
		
							parent
							
								
									43cb98db54
								
							
						
					
					
						commit
						10db8888c2
					
				| @ -3,6 +3,8 @@ use crate::{PSOPacket, PacketParseError}; | ||||
| 
 | ||||
| use std::io::{Read, Seek, SeekFrom}; | ||||
| 
 | ||||
| pub const PATCH_FILE_CHUNK_SIZE: u16 = 0x8000; // 32kb
 | ||||
| 
 | ||||
| #[allow(non_camel_case_types)] | ||||
| type u8_str = u8; | ||||
| 
 | ||||
| @ -44,6 +46,93 @@ pub struct LoginReply { | ||||
|     unused2: [u8; 64], | ||||
| } | ||||
| 
 | ||||
| #[pso_packet(0x06)] | ||||
| pub struct StartFileSend { | ||||
|     id: u32, | ||||
|     size: u32, | ||||
|     filename: [u8_str; 48], | ||||
| } | ||||
| 
 | ||||
| impl StartFileSend { | ||||
|     pub fn new(filename: &str, size: u32, id: u32) -> StartFileSend { | ||||
|         let mut f = [0u8; 48]; | ||||
|         for (src, dst) in filename.as_bytes().iter().zip(f.iter_mut()) { | ||||
|             *dst = *src | ||||
|         } | ||||
|         StartFileSend { | ||||
|             id: id, | ||||
|             size: size, | ||||
|             filename: f, | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| //#[pso_packet(0x07)]
 | ||||
| pub struct FileSend { | ||||
|     pub chunk_num: u32, | ||||
|     pub checksum: u32, | ||||
|     pub chunk_size: u32, | ||||
|     pub buffer: [u8; PATCH_FILE_CHUNK_SIZE as usize], | ||||
| } | ||||
| 
 | ||||
| impl PSOPacket for FileSend { | ||||
|     fn from_bytes(_data: &Vec<u8>) -> Result<FileSend, PacketParseError> { | ||||
|         // TODO: implement this? it shouldn't be called on the server side ever...
 | ||||
|         unimplemented!(); | ||||
|     } | ||||
| 
 | ||||
|     fn as_bytes(&self) -> Vec<u8> { | ||||
|         let mut buf: Vec<u8> = Vec::new(); | ||||
|         buf.extend_from_slice(&u32::to_le_bytes(self.chunk_num)); | ||||
|         buf.extend_from_slice(&u32::to_le_bytes(self.checksum)); | ||||
|         buf.extend_from_slice(&u32::to_le_bytes(self.chunk_size)); | ||||
|         buf.extend_from_slice(&self.buffer[0..self.chunk_size as usize]); | ||||
|         while buf.len() % 4 != 0 { | ||||
|             buf.push(0); | ||||
|         } | ||||
|         //buf
 | ||||
| 
 | ||||
|         //buf.extend_from_slice(&u16::to_le_bytes((4 * 4) as u16 + self.chunk_size as u16));
 | ||||
|         //buf.extend_from_slice(&u16::to_le_bytes(0x07));
 | ||||
|         let pkt_len = (buf.len() + 4) as u16; | ||||
|         let mut prebuf: Vec<u8> = Vec::new(); | ||||
| 
 | ||||
|         prebuf.extend_from_slice(&u16::to_le_bytes(pkt_len)); | ||||
|         prebuf.extend_from_slice(&u16::to_le_bytes(0x07)); | ||||
|         prebuf.append(&mut buf); | ||||
| 
 | ||||
|         prebuf | ||||
| 
 | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl std::fmt::Debug for FileSend { | ||||
|     fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { | ||||
|         write!(f, "packet FileSend {{\n").unwrap(); | ||||
|         write!(f, "    chunk_num: {:?}\n", self.chunk_num).unwrap(); | ||||
|         write!(f, "    checksum: {:X?}\n", self.checksum).unwrap(); | ||||
|         write!(f, "    chunk_size: {:X?}\n", self.chunk_size).unwrap(); | ||||
|         write!(f, "    buffer: [...a large array ...]\n").unwrap(); | ||||
|         write!(f, "}}") | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| #[pso_packet(0x08)] | ||||
| pub struct EndFileSend { | ||||
|     padding: u32, | ||||
| } | ||||
| 
 | ||||
| impl EndFileSend { | ||||
|     pub fn new() -> EndFileSend { | ||||
|         EndFileSend { | ||||
|             padding: 0, | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| #[pso_packet(0x0B)] | ||||
| pub struct PatchStartList { | ||||
| } | ||||
| @ -95,14 +184,33 @@ pub struct PatchEndList { | ||||
| 
 | ||||
| #[pso_packet(0x0F)] | ||||
| pub struct FileInfoReply { | ||||
|     id: u32, | ||||
|     checksum: u32, | ||||
|     size: u32, | ||||
|     pub id: u32, | ||||
|     pub checksum: u32, | ||||
|     pub size: u32, | ||||
| } | ||||
| 
 | ||||
| #[pso_packet(0x10)] | ||||
| pub struct FileInfoListEnd { | ||||
| } | ||||
| 
 | ||||
| #[pso_packet(0x11)] | ||||
| pub struct FilesToPatchMetadata { | ||||
|     data_size: u32, | ||||
|     file_count: u32, | ||||
| } | ||||
| 
 | ||||
| impl FilesToPatchMetadata { | ||||
|     pub fn new(data_size: u32, file_count: u32) -> FilesToPatchMetadata { | ||||
|         FilesToPatchMetadata { | ||||
|             data_size: data_size, | ||||
|             file_count: file_count, | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| #[pso_packet(0x12)] | ||||
| pub struct EndIt { | ||||
| pub struct FinalizePatching { | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user