1. Homepage
  2. Programming
  3. COMP2017 Systems Programming Assignment 3: ByteTide

COMP2017 Systems Programming Assignment 3: ByteTide

Engage in a Conversation
SydneyCOMP2017Systems ProgrammingCP2PCOMP9017ByteTide

COMP2017 9017 Assignment 3 CourseNana.COM

Assignment 3 - ByteTide - 20% CourseNana.COM

This assignment is worth 20% of your final assessment CourseNana.COM

You are tasked with constructing a P2P File-Transfer program that will allow sending, receiving and detection of anomalous data chunks. The activity that your program will participate in will handle the following activities: CourseNana.COM

• Loading a configuration
• Loading package files and parsing their format
• Checking the integrity of the file matching to the configuration file’s path
• Managing many files that are completed and incomplete
• Complies with a network protocol to communicate with peers
• Informing a client program of the latest information of your peer and the files it manages • Finalise and check that downloaded files match expected outcome
• Elegantly handle shutdown and disconnections from peers.
CourseNana.COM

To reiterate, the program’s aim is to manage files, check integrity of chunks and files, share files and chunks, handle peer connections and requests. Unlike other file-transfer programs, there are no tracker or relay systems in place. A Peer is another program complying with this specification. It will need to implement the configuration, integrity checking, network protocol and object management. CourseNana.COM

It is advisable that while reading this document that you also refer to the glossary if you do not understand certain terms outlined in this document. CourseNana.COM

We strongly recommend reading this entire document at least twice. You are encouraged to ask questions on Ed after you have first searched, and checked for updates of this document. If the question has not been asked before, make sure your question post is of "Question" post type and is under "Assignment" category "A3" subcategory. Please follow the staff directions for using the question template. As with any assignment, make sure that your work is your own1, and that you do not share your code or solutions with other students. CourseNana.COM

It is important that you continually back up your assignment files onto your own machine, flash drives, external hard drives and cloud storage providers (as private). You are encouraged to submit your assignment regularly while you are in the process of completing it. CourseNana.COM

1Not GPT-3/4’s, ChatGPT’s or copilot’s, etc.
1 CourseNana.COM

1 Part 1 - ByteTide Package Loader & Merkle Tree CourseNana.COM

To get started, you will need to be able to parse a .bpkg file and load it. To assist you with writing your code and complying with the test program, you are advised to complete the pkgchk.c file in the src directory. CourseNana.COM

1.1 The Package and its File Format (.bpkg) CourseNana.COM

In this program, a file is composed of several anomalous data chunks. The chunks are organised in a specific way such that when they are combined, the entire contents of the file can be constructed and presented to the user. A package defines the necessary information and resources required to construct the contents of a file. Packages represent a unique file given by an identifier string ident. CourseNana.COM

The package file format is a text format that will need to be parsed by your program. The package file format has the following fields. Please refer to the hash and chunk parts of the glossary. To also clarify, the package file, can be modelled as a binary tree, the term h, refers to the height of the tree in this instance. CourseNana.COM

  • ident, hexadecimal string (1024 characters max), the identifier is used within the network to identify the same packages. CourseNana.COM

  • filename, string (256 characters max), This is used to help save and locate the file to update when data is sent to it. CourseNana.COM

  • size, uint32_t, specifies the size in bytes CourseNana.COM

  • nhashes, uint32_t, specifies the number of hashes that are pre-computed from the original CourseNana.COM

    file. There must be only 2ˆ(h-1)-1 hashes which will correspond to the hashes of all non-leaf CourseNana.COM

    node CourseNana.COM

  • hashes, string[2ˆ(h-1) - 1] (64 characters for each string), these correspond to the number CourseNana.COM

    hashes in the previous nhashes field. CourseNana.COM

  • nchunks, uint32_t, specifies the number of chunks. The number of chunks must be a 2ˆ(h-1) CourseNana.COM

    value. CourseNana.COM

  • chunks, struct[2ˆ(h-1)], each chunk have the fields: hash, offset and size. CourseNana.COM

    hash refers to a string (64 characters), corresponding to the datablock hash value offset, uint32_t, is the offset within the file
    size, uint32_t, is the size of the chunk in bytes CourseNana.COM

    The format below gives an outline to the structure of a .bpkg file. Refer to the resources folder in the scaffold for a real example. CourseNana.COM

COMP2017 9017 CourseNana.COM

Systems Programming Page 2 of 18 CourseNana.COM

ident: <identifier>
filename: <filename>
size: <size in bytes>
nhashes: <number of hashes that are non-leaf nodes>
hashes:

"hash value" CourseNana.COM

    ...
nchunks: <number of chunks, these are all leaf nodes>
chunks:
    "hash value",offset,size
    ...

1.2 Package Loading CourseNana.COM

The focus of this task is to load the .bpkg file and also store the details into a merkle tree. Please refer to Section 1.3 for information on a merkle tree. CourseNana.COM

Read and load .bpkg files that comply with the format outlined in Section 1.1 CourseNana.COM

Once the .bpkg has been loaded successfully, it is advisable that your program also knows if the file exists or not and has functionality to construct a file of the size outlined in the file. Refer to pkgchk.c:bpkg_file_check function. CourseNana.COM

Implement a merkle tree. Use the data from a .bpkg to construct a merkle-tree Refer to pkgchk.c:bpkg_get_all_hashes and pkgchk.c:bpkg_get_all_chunk_hashes_from_hash functions, as you should be able to satisfy these operations after implementing a merkle tree without any IO on the data file. CourseNana.COM

Computing the merkle tree hashes, ensuring that combined hashes match the parents hashes when computed and finding minimum completed hashes. Refer to pkgchk.c:bpkg_get_completed_chunks and pkgchk.c:bpkg_get_min_completed_hashes functions. You will need to perform vali- dation on the chunks and discover portions of the file. CourseNana.COM

The above verifies chunks against package files and the data’s integrity. CourseNana.COM

1.3
Binary Tree A merkle tree is a variation on a binary tree. A binary tree is tree data structure, CourseNana.COM

where a node is compose of the following. CourseNana.COM

  • It holds a value/data CourseNana.COM

  • Usually implemented to hold a key as well (Key-Value/Map Data Structure) CourseNana.COM

  • Connected to two other nodes that are referred to as children. These are referred to as left CourseNana.COM

    and right nodes.
    A common structure within C for a binary tree node is as follows.
    CourseNana.COM

What is a merkle tree? CourseNana.COM

COMP2017 9017 CourseNana.COM

Systems Programming Page 3 of 18 CourseNana.COM

struct bt_node { void* key; CourseNana.COM

void* value;
struct bt_node* left; struct bt_node* right; CourseNana.COM

};
The above node, holds a key that will allow it to be searchable with the rule that it must be CourseNana.COM

unique. It also holds a value, which can be assigned to arbitrary data. CourseNana.COM

Please Note: When building a tree with a key field that allows you to perform a search an efficient tree search, you will need to ensure that your tree is using an appropriate function for the job. Hint, if your tree is going to be multi-purpose, consider giving your tree a function pointer to compare the key. CourseNana.COM

To navigate and/or traverse a tree, you’d be advised to traverse it in in-order traversal. Please make sure refer to your tree traversals. Please refer to the following documents to revise on tree-traversals: CourseNana.COM

Tree-Traversal - Wikipedia Visualgo - BST CourseNana.COM

Qualities of a merkle tree A merkle tree must is typically a perfect or full and complete binary tree but it can also be represented as a just a complete binary tree (Refer to Errata, Variations and Notes). CourseNana.COM

• Given a depth of d, the total number of nodes in your tree will be 2ˆd - 1
• All levels are full (necessary for a perfect binary tree).
• A merkle tree will have 2ˆ(d-1) nodes at depth
d, these will refer to your chunks. • A merkle tree will have 2ˆ(d-1) -1 non-leaf-nodes.
• All leaves have the same depth (no skewing)
CourseNana.COM

All nodes in a merkle tree have a hash value. Hashes of a leaf node corresponds to a hash value of a data chunk. This value is derived from computing hash value of the data chunk itself. CourseNana.COM

All other non-leaf nodes derive their hash value by hashing their children’s hash values together. Lets break down the above diagram. CourseNana.COM

  • L1-L4 are data blocks, these refer to chunks in a file. CourseNana.COM

  • Your leaf nodes 0-0 to 1-1 use a hash function to compute the hash of those data blocks. CourseNana.COM

    Given this part already, we have enough information to validate individual blocks. Pseudocode Example: self.hash = Hash(DataBlock[i]) CourseNana.COM

  • Your non-leaf nodes 0, 1 and root, compute their hashes by combining the hash of their chil- dren into a long string and compute the hash of that (Refer: Errata, Variations and Notes) CourseNana.COM

    Pseudocode Example: self.hash = Hash(left.hash + right.hash)
    Systems Programming Page 4 of 18 CourseNana.COM

COMP2017 9017 CourseNana.COM

Hash(
    Hash(root.left.left) + Hash(root.left.right)

)
+ Hash(
CourseNana.COM

    Hash(root.right.left) + Hash(root.right.right)
)

COMP2017 9017 CourseNana.COM

Figure 1: Merkle Tree - Wikipedia CourseNana.COM

The following is in relation to the .bpkg file and your merkle tree’s construction. You will have an expected hash value stored by your nodes and a computed hash value that you can use to 1) compute the hash on datablocks if it is a leaf node, or 2) compute the hash from the concatenation of left and right node hashes if it is a non-leaf node. CourseNana.COM

The following is an expansion of the operations. We are going through an example of computing the hash of root node of a tree with 7 nodes (similar to the diagram): CourseNana.COM

Expansion Pseudocode, with steps: CourseNana.COM

We need to compute the hash of the left and right child
1. Hash(root) = Hash(
        Hash(root.left) + Hash(root.right)
     )
Since left and right child are not leaf nodes, we need to do it again
2. Hash(root) = Hash(

Systems Programming CourseNana.COM

Page 5 of 18 CourseNana.COM

We have found the leaf nodes
Compute the hash of the data blocks, the size is the chunk size as
outlined in the .bpkg
3. Hash(root) = Hash(
Hash(
    Hash(DataBlock[0]) + Hash(DataBlock[1])

)
+ Hash(
CourseNana.COM

    Hash(DataBlock[2]) + Hash(DataBlock[3])
)

We concatenate the leaf children hashes that is assigned to their `computed` field
4. Hash(root) = Hash(
CourseNana.COM

            Hash(
                root.left.left.computed + root.left.right.computed

)
+ Hash(
CourseNana.COM

                root.right.left.computed + root.right.right.computed
            )
     )
Once again, concatenate the children hashes and compute the hash
of that
5. Hash(root) = Hash(
            root.left.computed + root.right.computed
        )

To help you get started, you can use the following struct as well as some helpful scaffold data. CourseNana.COM

struct merkle_tree_node { void* key; CourseNana.COM

void* value;
struct merkle_tree_node* left;
struct merkle_tree_node* right;
int is_leaf;
char expected_hash[64]; //Refer to SHA256 Hexadecimal size char computed_hash[64]; CourseNana.COM

}; CourseNana.COM

struct merkle_tree {
struct merkle_tree_node* root; CourseNana.COM

size_t n_nodes; CourseNana.COM

}; CourseNana.COM

Feel free to add and modify the struct above. Systems Programming CourseNana.COM

Page 6 of 18 CourseNana.COM

COMP2017 9017 CourseNana.COM

COMP2017 9017 Do note You can construct a merkle tree that isn’t a perfect binary tree. However, this may make CourseNana.COM

management of your data more difficult. Refer to Errata, Variations and Notes. CourseNana.COM

Do note Please make sure when you compute the hash, you use the hexadecimal representation. This is very important for non-leaf nodes that are computing the hash from an ordered concatenation of their children (left + right) hashes. CourseNana.COM

Errata, Variations and Notes CourseNana.COM

Implementations: It isn’t necessary for a merkle tree to be a full or complete binary tree. You could potentially have a merkle tree with more than 2 children Or not all leaf nodes are on the same level CourseNana.COM

However, we have made this assumption to help simplify the data structure. CourseNana.COM

Same-chunks, different positions: As through experimenting, you may have found that if you have chunks that contain the same data, in this case. Your implementation will need to either assume this will not happen or contain necessary data to differentiate it. CourseNana.COM

Please refer to REQ packet, specifically offset part to help resolve searches.
You can have a bit-field key alongside this similar to the diagram in the previous sections. CourseNana.COM

More data than needed: For the most part, the file has been provided with more data than required to help with implementing this data structure but also ensure that other parts aren’t restricted if it is in an incomplete state. CourseNana.COM

Using hexadecimal hash or byte-hash: The staff implementation uses the hexadecimal hash and while computing with the byte-hash is not-incorrect, it will yield different results to the test cases. Please make sure you comply with this. CourseNana.COM

1.5 Checklist CourseNana.COM

  • Parse valid .bpkg files, ensure you can read each field of them. CourseNana.COM

  • Construct a merkle tree from the bpkg files after parsing. CourseNana.COM

  • Implement all the functions pkgchk.c. CourseNana.COM

  • Run and compile make pkgchk.o and that will be able to compile pkgchk.c (Required CourseNana.COM

    for test cases) CourseNana.COM

  • You are free to modify the Makefile to refer to your c files you will use in your build targets. CourseNana.COM

  • Run and compile make pkgchecker, and compile against pkgmain.c to test your pro- CourseNana.COM

    gram locally. CourseNana.COM

Systems Programming Page 7 of 18 CourseNana.COM

2 Part 2 - Configuration, Networking and Program CourseNana.COM

You are now tasked with writing a program that will facilitate P2P file-transfer. Your program will need to complete the following tasks: CourseNana.COM

  • Load a basic configuration file, your program will need to maintain the directory path it will store CourseNana.COM

  • Implement and comply with the protocol to communicate with other peers within the network itself. CourseNana.COM

  • Implement the commands for your program, these will include connecting. Your program will need to connect, disconnect and retrieve peer information. Handle package loading and remov- ing, retrieval of chunks from other peers. CourseNana.COM

    This part deviates a little from part 1 as it is not completely necessary to build a merkle tree to get started on this part, let alone complete it. However It is necessary to be able to load a .bpkg file, retrieve the ident, filename, size, nchunks and chunks themselves for this part. CourseNana.COM

    The scaffold has provided the following files for the next sections for you to implement. CourseNana.COM

    src/peer.c, - Write peer management code here
    src/package.c - Write your package management logic here
    src/config.c - Write your configuration logic here
    src/btide.c, Contains the main function, starting point of the program. CourseNana.COM

    You are still free to change and alter the contents of the src folder how you see fit, however, your Makefile still needs to build the required targets. CourseNana.COM

    Makesureyourprogramisabletobebuildwithmake btide,thisshouldproduceanexecutable. CourseNana.COM

2.1 Configuration File CourseNana.COM

Your program will need to parse and load a configuration file that will be used to setup folder that it will either need to create or, if it exists, load existing packages from and refer to an existing file. CourseNana.COM

Your configuration file will be passed to your program via command line arguments. CourseNana.COM

./btide config.cfg

The program’s configuration file will use the following information: CourseNana.COM

directory, string, path local to the system that store .bpkg files and the files that are mapped in there. If the directory does not exist, the program should attempt to create it. If the program is unable to create the directory or it is a file, the program should exit with exit code 3. CourseNana.COM

COMP2017 9017 CourseNana.COM

Systems Programming Page 8 of 18 CourseNana.COM

max_peers, int, this field is the number of peers the program can be connected to. It is a value between [1, 2048] CourseNana.COM

If the max_peers value is set to an invalid number, your program should exit, with exit with exit code 4. CourseNana.COM

port, uint16_t, this field specifies the port the client will be listening on. Acceptable port range (1024, 65535]. CourseNana.COM

If the port value is set to an invalid number, your program should exit, with exit with exit code 5. CourseNana.COM

Example of the configuration file: CourseNana.COM

directory:downloads
max_peers:128
port:9000

Each field has an action if the constraints of that field are not met as above. If any fields are missing, the configuration should be rejected. CourseNana.COM

2.2 Network Protocol and Implementation Details CourseNana.COM

The section below will outline how your program will communicate to other programs on a network. It is advisable that your program also holds data related to peers and packages. CourseNana.COM

Network Protocol Your program can act as both a server and client to participants among the network. You will need to be able to form a listening socket to accept incoming connections but also have the ability to form new connections. CourseNana.COM

The network protocol will use ‘TCP/IP’ data packets to form connections. Your program should use the following packet structure below. CourseNana.COM

union btide_payload {
uint8_t data[PAYLOAD_MAX]; CourseNana.COM

}; CourseNana.COM

struct btide_packet { uint16_t msg_code; uint16_t error;
union btide_payload pl; CourseNana.COM

}; CourseNana.COM

Below are the only msg_code values that can be set CourseNana.COM

PKT_MSG_ACK 0x0c
PKT_MSG_ACP 0x02

COMP2017 9017 CourseNana.COM

Systems Programming CourseNana.COM

Page 9 of 18 CourseNana.COM

PKT_MSG_DSN 0x03
PKT_MSG_REQ 0x06
PKT_MSG_RES 0x07
PKT_MSG_PNG 0xFF
PKT_MSG_POG 0x00

Your program can send and receive the following packet types and their byte code value. All packets should be 4096 bytes, and their payload data (if not empty) should follow the order as specified below as the testing system expect data in this format. Padding is not required between different payload parameters. CourseNana.COM

  • ACP (0x02), when a peer connects to your program, you will need to acknowledge that you have accepted the connection so it can confirm it can add it to its own peer list. If your program connects to peer, you should wait for an ACP message back before you add the peer to your own peer list. If the peer does not respond, your program can kill the connection. CourseNana.COM

  • ACK (0x0c), when your program receives an ACP packet after a connect, you will send a message back with an ACK. This is to simply acknowledge that you have received the message. CourseNana.COM

  • DSN (0x03), when a peer wants to disconnect from another peer, it will send a message to the peer, telling that it will be disconnecting. The peer that originated the message will close off its socket and end the connection. CourseNana.COM

    Your program should detect when a shutdown has occurred by a peer that may not sent DSN. Pleasecheckman recvandman sendfordetectingthesecases. CourseNana.COM

  • REQ (0x06), This packet is sent to a peer to request data for a particular chunk. The re- quest packet will send the <identifier> (1024 bytes), <chunk hash> (64 bytes) and <offset> (4 bytes, uint32_t) to another peer in the expectation that the peer will send <data len>ofdataback. CourseNana.COM

    The order in the packet is as follows: file_offset, data_len, chunk_hash and identifier. CourseNana.COM

    <data len>
    If the peer sends you a REQ packet but you do not have the expected file or chunk available, CourseNana.COM

    you will need to inform the requester of an error in the RES packet. CourseNana.COM

  • RES (0x07), This packet is sent to an originator of a REQ packet, it will contain: <identifier>(1024bytes),<chunk hash>(64bytes),<offset>
    (4 bytes, uint32_t), <data len> (2 bytes, uint16_t) and most importantly <data> (max 2998 bytes). CourseNana.COM

    The order in the packet is as follows: file_offset, data, data_len, chunk_hash and identifier. CourseNana.COM

    Theresponsepacketwillsenddatafromthechunktotherequester,sincethefile<data len> componentmaynotmatchthe<req len>componentofaREQrequestpacket,thepeerwill need to send multiple RES packets to satisfy the length of data requested. This is normal as part of the REQ-RES flow. CourseNana.COM

    <offset> refers to the offset of the chunk that <data> will be written to.
    Systems Programming Page
    10 of 18 CourseNana.COM

COMP2017 9017 CourseNana.COM

If the peer does not have the data available, a error byte fields should be set to a number > 0. This will notify the requester that the current peer does not have the data requested. CourseNana.COM

If it is determined, after a REQ-RES conversation has finished, that the chunk sent is invalid, the chunk should be silently ignored. CourseNana.COM

PNG (0xFF), This packet is sent out with the intent to check if a peer is still alive. Nominally, this is usually sent out periodically, however in this implementation we will send it out when PEERS command is called. CourseNana.COM

No error handling is necessary for this particular packet. CourseNana.COM

POG (0x00), This is a pong message that will be sent to the originator of the PNG(0xFF) message. CourseNana.COM

The SIGPIPE signal could be raised, in particular with multi-threaded solutions (commonly con- nection per thread solutions) that may not know the connection has been terminated. Make sure your program handles this signal and also detects errors with your sockets as they arise. CourseNana.COM

All packets are fixed 4096 byte packets. This results in simple packet handling code within your program. CourseNana.COM

2.3 Building a CLI CourseNana.COM

To finish and to test your program, you will need to build a command line interface. There are a handful of commands that need to be implemented which also imply a certain amount of book keeping. CourseNana.COM

Commands Your program must be able to utilise the following commands. The commands are provided via standard input. Your program will stay alive until QUIT command is inputted. CourseNana.COM

All commands will have maximum of 5520 characters which can fit the command, identifier and path if ever required. CourseNana.COM

Do note, it is intended that the commands are case sensitive. You can assume command arguments are delimited by exactly one space 2 and should have no leading and trailing characters. CourseNana.COM

CONNECT <ip:port> CourseNana.COM

This command will attempt to connect to a peer within the network itself. Your program will need to constructasocketandattempttoconnecttoanotherpeeronthenetwork.man 2 socketformore information. Please refer to ACP and ACK packets in the network protocol section. CourseNana.COM

If the connect command succeeds, your program must output: Connection established with peer. CourseNana.COM

If the connect command fails, your program must output: CourseNana.COM

Unable to connect to request peer
2except for ADDPACKAGE in which the file name may contain spaces CourseNana.COM

COMP2017 9017 CourseNana.COM

Systems Programming CourseNana.COM

Page 11 of 18 CourseNana.COM

COMP2017 9017 If the ip and port given, have already been connected to and the connection is alive, your program CourseNana.COM

must output: Already connected to peer
If a the ip or port has not been specified, your program should output CourseNana.COM

Missing address and port argument. • DISCONNECT <ip:port> CourseNana.COM

This command will disconnect from a peer and remove it from a peer list. Please refer to the DSN packet in the network protocol section. CourseNana.COM

If the peer is connected and in your program’s peer list, your program must disconnect with the peer andoutputDisconnected from peer. CourseNana.COM

If the peer does not exist in your program’s peer list, your program must output: Unknown peer, not connected CourseNana.COM

Ifatheiporporthasnotbeenspecified,yourprogramshouldoutputMissing address and port argument. CourseNana.COM

ADDPACKAGE <file> CourseNana.COM

This command will add a package to manage. Ifathefilehasnotbeenspecified,yourprogramshouldoutputMissing file argument. CourseNana.COM

If the file does not exist or you do not have permission to use it, Your program must output: Cannot open file CourseNana.COM

Ifthefileisnotavalidbpkgfile,yourprogrammustoutputUnable to parse bpkg file. • REMPACKAGE <ident, 20 char matching> CourseNana.COM

where ident is identifier or partial identifier.
This command will remove a package that is being maintained by the program.
CourseNana.COM

If a the ident has not been specified, your program should output
Missing identifier argument, please specify whole 1024 character or at least 20 characters. CourseNana.COM

If the ident is not managed by your program, your program should output: Identifier provided does not match managed packages CourseNana.COM

Onsuccess,theprogramwilloutputPackage has been removed PACKAGES CourseNana.COM

Your program should report on the status of the packages loaded. Your program will have need to maintain a list of packages that have been added in working memory. CourseNana.COM

If your program is not managing any packages, your program will output No packages managed. CourseNana.COM

If your program is managing 1 or more packages, your program will output in the following format: Systems Programming Page 12 of 18 CourseNana.COM

[1..N]. <32 char identifier>, <filename> : (INCOMPLETE | COMPLETED)

Example: CourseNana.COM

1. 0c4d036a2161aa6525743d44725e6212, song5.mp3 :  INCOMPLETE
2. 13d608773eb8842426fddb8131d5c184, song6.ogg :  COMPLETED

...
PEERS CourseNana.COM

Lists all connected peers. This will also trigger a PNG packet to be sent to all peers you are connected to on the network. CourseNana.COM

Ifyourprogramisnotconnectedtoanypeers,itwilloutput:Not connected to any peers If your program is connected to 1 or more peers, your program will output in the following format: CourseNana.COM

Connected to:
[1..N]. <ip>:<port>

Example: CourseNana.COM

Connected to:
1. 192.168.1.1:9001
2. 192.168.2.120:1723

...
FETCH <ip:port> <identifier> <hash> (<offset>) CourseNana.COM

Requests chunks related to the hash given. Please refer to REQ and RES packets in the network protocol section. If an offset is specified, it will use this additional info to narrow down a hash at a particular offset of the file. The offset will need to match the start of that chunk and must be a number greater than or equal to 0. CourseNana.COM

If the number of arguments provided does not match 3, program will output: CourseNana.COM

Missing arguments from command

If the ip and port is missing from the peer list, your program will output: Unable to request chunk, peer not in list CourseNana.COM

Iftheidentifierismissingfromthepackagelist,yourprogramwilloutput:Unable to request chunk, package is not managed CourseNana.COM

If the hash does not exist in the package, your program will output CourseNana.COM

Unable to request chunk, chunk hash does not belong to package If the arguments specified are correct, a REQ packet will be sent to the peer. CourseNana.COM

QUIT
The program quits, no error should be outputted from this command. CourseNana.COM

AnyerroneouscommandswillrequiretheprogramtooutputInvalid Input.
Systems Programming Page
13 of 18 CourseNana.COM

COMP2017 9017 CourseNana.COM

2.4 Checklist CourseNana.COM

• • • CourseNana.COM

• • CourseNana.COM

• • CourseNana.COM

Implement all the packet types in the Network Protocol Section
Implement a data structure to add, remove and retrieve peer information.
Implement a data structure to add, remove and retrieve package information that your peer is managing.
Implement the commands for your client program.
Ensure that your packets are compatible between clients, test your program in class or with friends at uni.
Implement a tests for merkle tree based on A3 tests and any new tests you have derived since. Implement a tests for networking based on A3 tests and any new tests you have derived since.
CourseNana.COM

Implementation Help CourseNana.COM

This section here is to help give you hints to implement your networking application. CourseNana.COM

  • A simple networking technique is to use thread-per-connection. This means that, when a con- nection is accepted, it is split off into another thread. CourseNana.COM

    However, you will need to identify and manage when a connection has been terminated and detect when a thread has finished. CourseNana.COM

  • When managing peers, use a dynamic array or refer to the max_peers property. How- ever, you will need to keep track of the number of peers that are currently connected CourseNana.COM

  • Thestructpacketgivenprovidesagoodhintastowheretoaddspecificpacketdatainformation. Consider why a union would be best suited there. In additional, it makes it easy to just use only a single type to handle packets that are sent to your program. CourseNana.COM

  • Handling packets is similar to handling commands via standard input. As long as you got the message, you just need to make the decisions based on the type of packet. CourseNana.COM

    2.6 Resources CourseNana.COM

    You have been supplied additional resources to help with your assessment. These resources will include command line tools and utility functions that you will need to use during the development of your program. Use them to help with testing different components and constructing files test cases. CourseNana.COM

  • SHA256Implementation(crypt/sha256.c/.h),usedforhashingdataforthemerkletree, Also comes with sha256 utility program. CourseNana.COM

  • Package Make (./pkgmake --help), used for constructing a package file. CourseNana.COM

  • Packet Validator (./pktval --help), used for checking basics of packets sent across the CourseNana.COM

    network. CourseNana.COM

  • Getting started with networking (./getting_started/), folder with basic networking ex- ample code. CourseNana.COM

COMP2017 9017 CourseNana.COM

Systems Programming Page 14 of 18 CourseNana.COM

  • Example Packages (/packages/), a folder with a variety of example packages and files to test and inspect. You are encouraged to use xxd to inspect the files or even break up the files to verify different parts. CourseNana.COM

  • split command (./split --help), use this command to break apart a file and run it against the sha256 program included with the assessment. CourseNana.COM

    3 Assumptions CourseNana.COM

    This assessment makes a few reasonable assumptions around how packets and data will be encoded without explicitly outlining it in each section. It is also reasonable to make it clear how communica- tion is to be afforded if between all peers. CourseNana.COM

    For sake of simplicity, file and network binary data is sent or saved as little endian. For singular bytes this does not have any serious bearings however, for integers this is significant to outline as the order of bytes may be different between a BE and LE system with this software. CourseNana.COM

4 High performance Merkle tree CourseNana.COM

For the high mark, you would have a working implementation for all parts. If you cannot pass most test cases, this section will not be graded. CourseNana.COM

You are to optimise your merkle tree implementation to improve one of the following areas of your choosing: CourseNana.COM

  • minimising the time required for the I/O bound problem of large volumes of data to load and hash using multiple threads CourseNana.COM

  • minimisingthetimerequiredfortheCPUboundproblemofcalculatingallhashesofthemerkle tree using multiple threads for insertions CourseNana.COM

  • building a merkle tree from a .bpkg file in parallel CourseNana.COM

For this mark, you will need: CourseNana.COM

  • a benchmark method that can be executed by the grader, CourseNana.COM

  • testing data (ideally procedurally generated from the benchmark), CourseNana.COM

  • a report of 500-1000 words describing which of the above optimisations you are aiming for, and where you applied these in the code. CourseNana.COM

    Ideally, you achieve a speedup proportional to the number of threads and/or size of input. A graph of this behaviour would complement your report. CourseNana.COM

COMP2017 9017 CourseNana.COM

Systems Programming Page 15 of 18 CourseNana.COM

5 Marking and notes CourseNana.COM

This assignment will be subjected to manual marking and auto marking. The assessment has been broken up into 3 parts, with one external part that you are able to access. CourseNana.COM

  • ThereexistsasignificantmismatchbetweenA3testsandsubmittedtests.Onlyinthecasewhere the number of tests described in the A3tests report are far greater than what is being tested in this final submission. For example, if there are 50 tests described in A3tests and only 10 are implemented in the final, this would be a problem and deductions would apply. CourseNana.COM

    Up to 5/20 A3 marks may be deducted. CourseNana.COM

  • Final git repository is UNCLEAN. CourseNana.COM

    Up to 2/20 A3 marks will be deducted when the final git repository is unclean.
    Essentially, you are submitting a
    git repository to EdStem. Make sure the final git repository (e.g.,allgit commitsofthisrepository)submittedcontainsONLYsourcefiles,headerfiles, test files, documentation in text files. Ask on EdStem if you need to commit other files. Sug- gestions: (1) Execute git status frequently, before each git add and git commit. (2) Never git add . or git add -A. (3) Include a proper .gitignore file. (4) Read previous guides and discussions on EdStem. CourseNana.COM

  • Memory errors and memory leaks occur.
    1/20 A3 marks will be deducted for EACH occurrence of memory errors or memory leaks. This deduction will be capped at 5/20 A3 marks. Memory errors and leaks are determined by
    Valgrind.
    Can be detected with
    Valgrind and ASAN. Guides are available on EdStem. Ask on EdStem if you cannot find the guides or need help. CourseNana.COM

  • Dynamic memory and shared memory are not utilised in implementations. E.g., When ONLY file IO is utilised, while mmap and heap memory are not used.
    20/20 A3 marks may be deducted.
    CourseNana.COM

  • VLAs (Variable-length array) are used. Add -Wall -Wvla to compilation arguments.
    1/20 A3 marks will be deducted for EACH VLA occurrence (VLA definition). This deduction will be capped at 5/20 A3 marks.
    CourseNana.COM

  • There exists non-English comments, or notes, presented in any part of the submission.
    1/20 A3 marks will be deducted for EACH line. This deduction will be capped at 5/20 A3 marks.
    CourseNana.COM

  • There exists the use any external libraries, other than those in glibc.
    20/20 A3 marks may be deducted.
    Ask on EdStem before using any external libraries. CourseNana.COM

    Other restricted functions may come at a later date.
    Systems Programming Page
    16 of 18 CourseNana.COM

COMP2017 9017 CourseNana.COM

Academic Declaration CourseNana.COM

By submitting this assignment you declare the following: I declare that I have read and understood the University of Sydney Student Plagiarism: Coursework Policy and Procedure, and except where specifically acknowledged, the work contained in this assignment/project is my own work, and has not been copied from other sources or been previously submitted for award or assessment. CourseNana.COM

I understand that failure to comply with the Student Plagiarism: Coursework Policy and Procedure can lead to severe penalties as outlined under Chapter 8 of the University of Sydney By-Law 1999 (as amended). These penalties may be imposed in cases where any significant portion of my submit- ted work has been copied without proper acknowledgement from other sources, including published works, the Internet, existing programs, the work of other students, or work previously submitted for other awards or assessments. CourseNana.COM

I realise that I may be asked to identify those portions of the work contributed by me and required to demonstrate my knowledge of the relevant material by answering oral questions or by undertaking supplementary work, either written or in the laboratory, in order to arrive at the final assessment mark. CourseNana.COM

I acknowledge that the School of Computer Science, in assessing this assignment, may reproduce it entirely, may provide a copy to another member of faculty, and/or communicate a copy of this assignment to a plagiarism checking service or in-house computer program, and that a copy of the assignment may be maintained by the service or the School of Computer Science for the purpose of future plagiarism checking. CourseNana.COM

COMP2017 9017 CourseNana.COM

Systems Programming Page 17 of 18 CourseNana.COM

CourseNana.COM

Changes CourseNana.COM

• 2024-04-29 CourseNana.COM

Minor typographical errors
DISCONNECT contained notion of not removing peer from peer list
Added optional offset parameter to FETCH command to help with specificity. CourseNana.COM

COMP2017 9017 CourseNana.COM

Systems Programming Page 18 of 18  CourseNana.COM

Get in Touch with Our Experts

WeChat (微信) WeChat (微信)
Whatsapp WhatsApp
Sydney代写,COMP2017代写,Systems Programming代写,C代写,P2P代写,COMP9017代写,ByteTide代写,Sydney代编,COMP2017代编,Systems Programming代编,C代编,P2P代编,COMP9017代编,ByteTide代编,Sydney代考,COMP2017代考,Systems Programming代考,C代考,P2P代考,COMP9017代考,ByteTide代考,Sydneyhelp,COMP2017help,Systems Programminghelp,Chelp,P2Phelp,COMP9017help,ByteTidehelp,Sydney作业代写,COMP2017作业代写,Systems Programming作业代写,C作业代写,P2P作业代写,COMP9017作业代写,ByteTide作业代写,Sydney编程代写,COMP2017编程代写,Systems Programming编程代写,C编程代写,P2P编程代写,COMP9017编程代写,ByteTide编程代写,Sydneyprogramming help,COMP2017programming help,Systems Programmingprogramming help,Cprogramming help,P2Pprogramming help,COMP9017programming help,ByteTideprogramming help,Sydneyassignment help,COMP2017assignment help,Systems Programmingassignment help,Cassignment help,P2Passignment help,COMP9017assignment help,ByteTideassignment help,Sydneysolution,COMP2017solution,Systems Programmingsolution,Csolution,P2Psolution,COMP9017solution,ByteTidesolution,