Loading .idea/workspace.xml +100 −68 Original line number Original line Diff line number Diff line Loading @@ -12,8 +12,12 @@ </component> </component> <component name="ChangeListManager"> <component name="ChangeListManager"> <list default="true" id="36048fb3-fc75-499f-9004-4a458a9d082e" name="Default" comment=""> <list default="true" id="36048fb3-fc75-499f-9004-4a458a9d082e" name="Default" comment=""> <change beforePath="$PROJECT_DIR$/buffer.c" beforeDir="false" afterPath="$PROJECT_DIR$/buffer.c" afterDir="false" /> <change afterPath="$PROJECT_DIR$/urlParse.c" afterDir="false" /> <change afterPath="$PROJECT_DIR$/urlParse.h" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/CMakeLists.txt" beforeDir="false" afterPath="$PROJECT_DIR$/CMakeLists.txt" afterDir="false" /> <change beforePath="$PROJECT_DIR$/connect.c" beforeDir="false" afterPath="$PROJECT_DIR$/connect.c" afterDir="false" /> <change beforePath="$PROJECT_DIR$/connect.c" beforeDir="false" afterPath="$PROJECT_DIR$/connect.c" afterDir="false" /> <change beforePath="$PROJECT_DIR$/main.c" beforeDir="false" afterPath="$PROJECT_DIR$/main.c" afterDir="false" /> </list> </list> <ignored path="$PROJECT_DIR$/cmake-build-debug/" /> <ignored path="$PROJECT_DIR$/cmake-build-debug/" /> <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> Loading @@ -29,8 +33,8 @@ <file leaf-file-name="buffer.c" pinned="false" current-in-tab="false"> <file leaf-file-name="buffer.c" pinned="false" current-in-tab="false"> <entry file="file://$PROJECT_DIR$/buffer.c"> <entry file="file://$PROJECT_DIR$/buffer.c"> <provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="435"> <state relative-caret-position="180"> <caret line="41" column="39" selection-start-line="41" selection-start-column="39" selection-end-line="41" selection-end-column="39" /> <caret line="10" column="20" selection-start-line="10" selection-start-column="20" selection-end-line="10" selection-end-column="20" /> <folding> <folding> <element signature="e#40#59#0" expanded="true" /> <element signature="e#40#59#0" expanded="true" /> </folding> </folding> Loading @@ -38,11 +42,11 @@ </provider> </provider> </entry> </entry> </file> </file> <file leaf-file-name="connect.c" pinned="false" current-in-tab="false"> <file leaf-file-name="connect.c" pinned="false" current-in-tab="true"> <entry file="file://$PROJECT_DIR$/connect.c"> <entry file="file://$PROJECT_DIR$/connect.c"> <provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="370"> <state relative-caret-position="444"> <caret line="71" column="27" selection-start-line="71" selection-start-column="27" selection-end-line="71" selection-end-column="27" /> <caret line="75" column="27" selection-start-line="75" selection-start-column="27" selection-end-line="75" selection-end-column="27" /> <folding> <folding> <element signature="e#42#62#0" expanded="true" /> <element signature="e#42#62#0" expanded="true" /> </folding> </folding> Loading @@ -50,11 +54,11 @@ </provider> </provider> </entry> </entry> </file> </file> <file leaf-file-name=",gitignore" pinned="false" current-in-tab="true"> <file leaf-file-name="urlParse.h" pinned="false" current-in-tab="false"> <entry file="file://$PROJECT_DIR$/,gitignore"> <entry file="file://$PROJECT_DIR$/urlParse.h"> <provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="334"> <state relative-caret-position="108"> <caret line="84" column="18" selection-start-line="84" selection-start-column="18" selection-end-line="84" selection-end-column="18" /> <caret line="6" column="15" selection-start-line="6" selection-start-column="4" selection-end-line="6" selection-end-column="15" /> </state> </state> </provider> </provider> </entry> </entry> Loading @@ -62,8 +66,8 @@ <file leaf-file-name="main.c" pinned="false" current-in-tab="false"> <file leaf-file-name="main.c" pinned="false" current-in-tab="false"> <entry file="file://$PROJECT_DIR$/main.c"> <entry file="file://$PROJECT_DIR$/main.c"> <provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="703"> <state relative-caret-position="742"> <caret line="57" selection-start-line="57" selection-end-line="57" /> <caret line="75" column="23" selection-start-line="75" selection-start-column="8" selection-end-line="75" selection-end-column="23" /> <folding> <folding> <element signature="e#0#19#0" expanded="true" /> <element signature="e#0#19#0" expanded="true" /> </folding> </folding> Loading @@ -71,18 +75,6 @@ </provider> </provider> </entry> </entry> </file> </file> <file leaf-file-name="connect.h" pinned="false" current-in-tab="false"> <entry file="file://$PROJECT_DIR$/connect.h"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="270"> <caret line="15" column="22" selection-start-line="15" selection-start-column="22" selection-end-line="15" selection-end-column="22" /> <folding> <element signature="e#124#142#0" expanded="true" /> </folding> </state> </provider> </entry> </file> </leaf> </leaf> </component> </component> <component name="FindInProjectRecents"> <component name="FindInProjectRecents"> Loading @@ -105,10 +97,12 @@ <option value="$PROJECT_DIR$/CMakeLists.txt" /> <option value="$PROJECT_DIR$/CMakeLists.txt" /> <option value="$PROJECT_DIR$/README.md" /> <option value="$PROJECT_DIR$/README.md" /> <option value="$PROJECT_DIR$/connect.h" /> <option value="$PROJECT_DIR$/connect.h" /> <option value="$PROJECT_DIR$/main.c" /> <option value="$PROJECT_DIR$/connect.c" /> <option value="$PROJECT_DIR$/buffer.c" /> <option value="$PROJECT_DIR$/buffer.c" /> <option value="$PROJECT_DIR$/,gitignore" /> <option value="$PROJECT_DIR$/,gitignore" /> <option value="$PROJECT_DIR$/urlParse.c" /> <option value="$PROJECT_DIR$/urlParse.h" /> <option value="$PROJECT_DIR$/main.c" /> <option value="$PROJECT_DIR$/connect.c" /> </list> </list> </option> </option> </component> </component> Loading Loading @@ -166,8 +160,8 @@ </option> </option> </component> </component> <component name="RunManager" selected="Application.http_client"> <component name="RunManager" selected="Application.http_client"> <configuration name="Build All" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="coms352_project2_part1" RUN_TARGET_NAME="coms352_project2_part1" EXPLICIT_BUILD_TARGET_NAME="all" /> <configuration name="Build All" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="coms352_project2_part1" RUN_TARGET_NAME="http_client" EXPLICIT_BUILD_TARGET_NAME="all" /> <configuration name="http_client" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="www.cs.iastate.edu" PASS_PARENT_ENVS_2="true" PROJECT_NAME="coms352_project2_part1" TARGET_NAME="http_client" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="coms352_project2_part1" RUN_TARGET_NAME="http_client" /> <configuration name="http_client" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="www.google.com" PASS_PARENT_ENVS_2="true" PROJECT_NAME="coms352_project2_part1" TARGET_NAME="http_client" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="coms352_project2_part1" RUN_TARGET_NAME="http_client" /> <list> <list> <item itemvalue="Application.Build All" /> <item itemvalue="Application.Build All" /> <item itemvalue="Application.http_client" /> <item itemvalue="Application.http_client" /> Loading @@ -186,35 +180,36 @@ <workItem from="1520536552677" duration="1731000" /> <workItem from="1520536552677" duration="1731000" /> <workItem from="1522346739296" duration="3244000" /> <workItem from="1522346739296" duration="3244000" /> <workItem from="1523115745573" duration="9472000" /> <workItem from="1523115745573" duration="9472000" /> <workItem from="1523128673229" duration="3157000" /> <workItem from="1523128673229" duration="5207000" /> <workItem from="1523307294356" duration="902000" /> </task> </task> <servers /> <servers /> </component> </component> <component name="TimeTrackingManager"> <component name="TimeTrackingManager"> <option name="totallyTimeSpent" value="17604000" /> <option name="totallyTimeSpent" value="20556000" /> </component> </component> <component name="ToolWindowManager"> <component name="ToolWindowManager"> <frame x="0" y="27" width="2560" height="1573" extended-state="6" /> <frame x="0" y="27" width="2560" height="1573" extended-state="6" /> <editor active="true" /> <editor active="true" /> <layout> <layout> <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.12066246" /> <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.12066246" /> <window_info anchor="bottom" id="TODO" order="6" /> <window_info anchor="bottom" id="TODO" order="6" /> <window_info anchor="bottom" id="Messages" order="7" weight="0.33053222" /> <window_info anchor="bottom" id="Messages" order="7" weight="0.33053222" /> <window_info anchor="bottom" id="CMake" order="7" /> <window_info anchor="bottom" id="CMake" order="7" /> <window_info anchor="bottom" id="Event Log" order="7" side_tool="true" /> <window_info anchor="bottom" id="Event Log" order="7" side_tool="true" /> <window_info anchor="bottom" id="Version Control" order="7" /> <window_info anchor="bottom" id="Run" order="2" weight="0.32843137" /> <window_info anchor="bottom" id="Run" order="2" weight="0.32843137" /> <window_info anchor="bottom" id="Version Control" order="7" /> <window_info id="Structure" order="1" side_tool="true" weight="0.25" /> <window_info id="Structure" order="1" side_tool="true" weight="0.25" /> <window_info anchor="bottom" id="Terminal" order="7" visible="true" weight="0.32983193" /> <window_info active="true" anchor="bottom" id="Terminal" order="7" visible="true" weight="0.33053222" /> <window_info id="Favorites" order="2" side_tool="true" /> <window_info anchor="bottom" id="Debug" order="3" weight="0.39985994" /> <window_info anchor="bottom" id="Debug" order="3" weight="0.39985994" /> <window_info id="Favorites" order="2" side_tool="true" /> <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" /> <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" /> <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" /> <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" /> <window_info anchor="right" id="Commander" order="0" weight="0.4" /> <window_info anchor="right" id="Commander" order="0" weight="0.4" /> <window_info anchor="right" id="Ant Build" order="1" weight="0.25" /> <window_info anchor="right" id="Ant Build" order="1" weight="0.25" /> <window_info anchor="bottom" id="Find" order="1" /> <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> <window_info anchor="bottom" id="Message" order="0" /> <window_info anchor="bottom" id="Message" order="0" /> <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> <window_info anchor="bottom" id="Find" order="1" /> </layout> </layout> </component> </component> <component name="TypeScriptGeneratedFilesManager"> <component name="TypeScriptGeneratedFilesManager"> Loading @@ -233,31 +228,21 @@ </line-breakpoint> </line-breakpoint> <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType"> <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType"> <url>file://$PROJECT_DIR$/connect.c</url> <url>file://$PROJECT_DIR$/connect.c</url> <line>112</line> <line>93</line> <option name="timeStamp" value="8" /> <option name="timeStamp" value="20" /> </line-breakpoint> <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType"> <url>file://$PROJECT_DIR$/connect.c</url> <line>105</line> <option name="timeStamp" value="16" /> </line-breakpoint> </line-breakpoint> <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType"> <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType"> <url>file://$PROJECT_DIR$/connect.c</url> <url>file://$PROJECT_DIR$/connect.c</url> <line>102</line> <line>115</line> <option name="timeStamp" value="17" /> <option name="timeStamp" value="22" /> </line-breakpoint> </line-breakpoint> <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType"> <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType"> <url>file://$PROJECT_DIR$/connect.c</url> <url>file://$PROJECT_DIR$/connect.c</url> <line>93</line> <line>103</line> <option name="timeStamp" value="20" /> <option name="timeStamp" value="24" /> </line-breakpoint> <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType"> <url>file://$PROJECT_DIR$/main.c</url> <line>57</line> <option name="timeStamp" value="21" /> </line-breakpoint> </line-breakpoint> </breakpoints> </breakpoints> <option name="time" value="22" /> <option name="time" value="25" /> </breakpoint-manager> </breakpoint-manager> </component> </component> <component name="debuggerHistoryManager"> <component name="debuggerHistoryManager"> Loading @@ -280,6 +265,36 @@ </expressions> </expressions> </component> </component> <component name="editorHistoryManager"> <component name="editorHistoryManager"> <entry file="file://$PROJECT_DIR$/buffer.c"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="180"> <caret line="10" column="20" selection-start-line="10" selection-start-column="20" selection-end-line="10" selection-end-column="20" /> <folding> <element signature="e#40#59#0" expanded="true" /> </folding> </state> </provider> </entry> <entry file="file://$PROJECT_DIR$/connect.c"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="144"> <caret line="8" column="3" lean-forward="true" selection-start-line="8" selection-start-column="3" selection-end-line="8" selection-end-column="3" /> <folding> <element signature="e#42#62#0" expanded="true" /> </folding> </state> </provider> </entry> <entry file="file://$PROJECT_DIR$/main.c"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="1296"> <caret line="72" column="44" selection-start-line="72" selection-start-column="44" selection-end-line="72" selection-end-column="44" /> <folding> <element signature="e#0#19#0" expanded="true" /> </folding> </state> </provider> </entry> <entry file="file://$PROJECT_DIR$/buffer.c"> <entry file="file://$PROJECT_DIR$/buffer.c"> <provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="630"> <state relative-caret-position="630"> Loading Loading @@ -423,6 +438,13 @@ </state> </state> </provider> </provider> </entry> </entry> <entry file="file://$PROJECT_DIR$/,gitignore"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="334"> <caret line="84" column="18" selection-start-line="84" selection-start-column="18" selection-end-line="84" selection-end-column="18" /> </state> </provider> </entry> <entry file="file://$PROJECT_DIR$/connect.h"> <entry file="file://$PROJECT_DIR$/connect.h"> <provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="270"> <state relative-caret-position="270"> Loading @@ -433,40 +455,50 @@ </state> </state> </provider> </provider> </entry> </entry> <entry file="file://$PROJECT_DIR$/main.c"> <entry file="file://$PROJECT_DIR$/buffer.c"> <provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="703"> <state relative-caret-position="180"> <caret line="57" selection-start-line="57" selection-end-line="57" /> <caret line="10" column="20" selection-start-line="10" selection-start-column="20" selection-end-line="10" selection-end-column="20" /> <folding> <folding> <element signature="e#0#19#0" expanded="true" /> <element signature="e#40#59#0" expanded="true" /> </folding> </folding> </state> </state> </provider> </provider> </entry> </entry> <entry file="file://$PROJECT_DIR$/buffer.c"> <entry file="file://$PROJECT_DIR$/urlParse.c"> <provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="435"> <state relative-caret-position="288"> <caret line="41" column="39" selection-start-line="41" selection-start-column="39" selection-end-line="41" selection-end-column="39" /> <caret line="16" selection-start-line="16" selection-end-line="18" selection-end-column="44" /> <folding> <folding> <element signature="e#40#59#0" expanded="true" /> <element signature="e#40#61#0" expanded="true" /> </folding> </folding> </state> </state> </provider> </provider> </entry> </entry> <entry file="file://$PROJECT_DIR$/connect.c"> <entry file="file://$PROJECT_DIR$/urlParse.h"> <provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="370"> <state relative-caret-position="108"> <caret line="71" column="27" selection-start-line="71" selection-start-column="27" selection-end-line="71" selection-end-column="27" /> <caret line="6" column="15" selection-start-line="6" selection-start-column="4" selection-end-line="6" selection-end-column="15" /> </state> </provider> </entry> <entry file="file://$PROJECT_DIR$/main.c"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="742"> <caret line="75" column="23" selection-start-line="75" selection-start-column="8" selection-end-line="75" selection-end-column="23" /> <folding> <folding> <element signature="e#42#62#0" expanded="true" /> <element signature="e#0#19#0" expanded="true" /> </folding> </folding> </state> </state> </provider> </provider> </entry> </entry> <entry file="file://$PROJECT_DIR$/,gitignore"> <entry file="file://$PROJECT_DIR$/connect.c"> <provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="334"> <state relative-caret-position="444"> <caret line="84" column="18" selection-start-line="84" selection-start-column="18" selection-end-line="84" selection-end-column="18" /> <caret line="75" column="27" selection-start-line="75" selection-start-column="27" selection-end-line="75" selection-end-column="27" /> <folding> <element signature="e#42#62#0" expanded="true" /> </folding> </state> </state> </provider> </provider> </entry> </entry> Loading CMakeLists.txt +1 −1 Original line number Original line Diff line number Diff line Loading @@ -3,4 +3,4 @@ project(coms352_project2_part1 C) set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD 11) add_executable(http_client main.c connect.c connect.h buffer.c buffer.h) add_executable(http_client main.c connect.c connect.h buffer.c buffer.h urlParse.c urlParse.h) No newline at end of file No newline at end of file connect.c +3 −3 Original line number Original line Diff line number Diff line Loading @@ -73,9 +73,9 @@ int execate_request(int socketfd, char *hostname, char *path, int head) { // Figure out the verb // Figure out the verb char *firstLine; char *firstLine; if (head) { if (head) { firstLine = "HEAD "; firstLine = "HEAD /"; } else { } else { firstLine = "GET "; firstLine = "GET /"; } } // Building verb part // Building verb part appendBuffer(&request, firstLine, strlen(firstLine)); appendBuffer(&request, firstLine, strlen(firstLine)); Loading main.c +29 −2 Original line number Original line Diff line number Diff line Loading @@ -4,12 +4,16 @@ #include <ctype.h> #include <ctype.h> #include "connect.h" #include "connect.h" #include "buffer.h" #include "buffer.h" #include "urlParse.h" /// Main method for the program /// Main method for the program /// /// /// \param argc /// \param argc /// \param argv /// \param argv /// \return /// \return void show_help_exit(char *argv); int main (int argc, char **argv) { int main (int argc, char **argv) { int header_only = 0; int header_only = 0; int timeDelta = 0; int timeDelta = 0; Loading @@ -20,6 +24,10 @@ int main (int argc, char **argv) { opterr = 0; opterr = 0; if (argc < 2) { show_help_exit(argv[0]); } // getopts section based on // getopts section based on // https://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html#Example-of-Getopt // https://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html#Example-of-Getopt while ((c = getopt(argc, argv, "hd:")) != -1) while ((c = getopt(argc, argv, "hd:")) != -1) Loading Loading @@ -52,12 +60,31 @@ int main (int argc, char **argv) { for (index = optind; index < argc; index++) for (index = optind; index < argc; index++) printf("Non-option argument %s\n", argv[index]); printf("Non-option argument %s\n", argv[index]); printf("\noptind: %s\n", (argv[optind])); if (argv[optind] == NULL) { show_help_exit(argv[0]); } init_connection(argv[optind], 80, &addressInfo); char *host = malloc(sizeof(char) * 256); int port = 80; char *page = malloc(sizeof(char) * 256); getUrlParts(argv[optind], &host, &port, &page); printf("\nhost: %s\n", host); init_connection(host, 80, &addressInfo); int sockfd = establish_connect(addressInfo); int sockfd = establish_connect(addressInfo); execate_request(sockfd, "www.cs.iastate.edu", "/index.html", 0); if (header_only == 1) { execate_request(sockfd, host, page, 1); } else { execate_request(sockfd, host, page, 0); } GrowthBuffer gp; GrowthBuffer gp; initBuffer(&gp, 50); initBuffer(&gp, 50); get_result(sockfd, &gp, RECV_SIZE); get_result(sockfd, &gp, RECV_SIZE); printf("%s", gp.array); printf("%s", gp.array); } } void show_help_exit(char *argv) { fprintf(stderr, "\n%s [–h] [–d <time-interval>] <URL>", argv); exit(EXIT_FAILURE); } No newline at end of file urlParse.c 0 → 100644 +37 −0 Original line number Original line Diff line number Diff line // // Created by mburket on 4/9/18. // #include "urlParse.h" #include <stdlib.h> #include <stdio.h> #include <string.h> /// Gets the parts of a url from a string /// /// \param url the full string of the url /// \param rhost return host /// \param rport return port /// \param rpage return /// \return 0 if success int getUrlParts(char *url, char **rhost, int *rport, char **rpage) { char *host = malloc(sizeof(char) * 256); int port = 80; char *page = malloc(sizeof(char) * 256); for (int i = 0; i < 100; i++) { page[0] = '\0'; } // I know this bad // But it works somewhat // Idea from https://stackoverflow.com/a/726214 if (sscanf(url, "http://%99[^:]:%99d/%99[^\n]", host, &port, page) == 3) { } else { sscanf(url, "http://%99[^/]/%99[^\n]", host, page); } strcpy(*rhost, host); *rport = port; strcpy(*rpage, page); free(page); free(host); return 0; } Loading
.idea/workspace.xml +100 −68 Original line number Original line Diff line number Diff line Loading @@ -12,8 +12,12 @@ </component> </component> <component name="ChangeListManager"> <component name="ChangeListManager"> <list default="true" id="36048fb3-fc75-499f-9004-4a458a9d082e" name="Default" comment=""> <list default="true" id="36048fb3-fc75-499f-9004-4a458a9d082e" name="Default" comment=""> <change beforePath="$PROJECT_DIR$/buffer.c" beforeDir="false" afterPath="$PROJECT_DIR$/buffer.c" afterDir="false" /> <change afterPath="$PROJECT_DIR$/urlParse.c" afterDir="false" /> <change afterPath="$PROJECT_DIR$/urlParse.h" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/CMakeLists.txt" beforeDir="false" afterPath="$PROJECT_DIR$/CMakeLists.txt" afterDir="false" /> <change beforePath="$PROJECT_DIR$/connect.c" beforeDir="false" afterPath="$PROJECT_DIR$/connect.c" afterDir="false" /> <change beforePath="$PROJECT_DIR$/connect.c" beforeDir="false" afterPath="$PROJECT_DIR$/connect.c" afterDir="false" /> <change beforePath="$PROJECT_DIR$/main.c" beforeDir="false" afterPath="$PROJECT_DIR$/main.c" afterDir="false" /> </list> </list> <ignored path="$PROJECT_DIR$/cmake-build-debug/" /> <ignored path="$PROJECT_DIR$/cmake-build-debug/" /> <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> Loading @@ -29,8 +33,8 @@ <file leaf-file-name="buffer.c" pinned="false" current-in-tab="false"> <file leaf-file-name="buffer.c" pinned="false" current-in-tab="false"> <entry file="file://$PROJECT_DIR$/buffer.c"> <entry file="file://$PROJECT_DIR$/buffer.c"> <provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="435"> <state relative-caret-position="180"> <caret line="41" column="39" selection-start-line="41" selection-start-column="39" selection-end-line="41" selection-end-column="39" /> <caret line="10" column="20" selection-start-line="10" selection-start-column="20" selection-end-line="10" selection-end-column="20" /> <folding> <folding> <element signature="e#40#59#0" expanded="true" /> <element signature="e#40#59#0" expanded="true" /> </folding> </folding> Loading @@ -38,11 +42,11 @@ </provider> </provider> </entry> </entry> </file> </file> <file leaf-file-name="connect.c" pinned="false" current-in-tab="false"> <file leaf-file-name="connect.c" pinned="false" current-in-tab="true"> <entry file="file://$PROJECT_DIR$/connect.c"> <entry file="file://$PROJECT_DIR$/connect.c"> <provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="370"> <state relative-caret-position="444"> <caret line="71" column="27" selection-start-line="71" selection-start-column="27" selection-end-line="71" selection-end-column="27" /> <caret line="75" column="27" selection-start-line="75" selection-start-column="27" selection-end-line="75" selection-end-column="27" /> <folding> <folding> <element signature="e#42#62#0" expanded="true" /> <element signature="e#42#62#0" expanded="true" /> </folding> </folding> Loading @@ -50,11 +54,11 @@ </provider> </provider> </entry> </entry> </file> </file> <file leaf-file-name=",gitignore" pinned="false" current-in-tab="true"> <file leaf-file-name="urlParse.h" pinned="false" current-in-tab="false"> <entry file="file://$PROJECT_DIR$/,gitignore"> <entry file="file://$PROJECT_DIR$/urlParse.h"> <provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="334"> <state relative-caret-position="108"> <caret line="84" column="18" selection-start-line="84" selection-start-column="18" selection-end-line="84" selection-end-column="18" /> <caret line="6" column="15" selection-start-line="6" selection-start-column="4" selection-end-line="6" selection-end-column="15" /> </state> </state> </provider> </provider> </entry> </entry> Loading @@ -62,8 +66,8 @@ <file leaf-file-name="main.c" pinned="false" current-in-tab="false"> <file leaf-file-name="main.c" pinned="false" current-in-tab="false"> <entry file="file://$PROJECT_DIR$/main.c"> <entry file="file://$PROJECT_DIR$/main.c"> <provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="703"> <state relative-caret-position="742"> <caret line="57" selection-start-line="57" selection-end-line="57" /> <caret line="75" column="23" selection-start-line="75" selection-start-column="8" selection-end-line="75" selection-end-column="23" /> <folding> <folding> <element signature="e#0#19#0" expanded="true" /> <element signature="e#0#19#0" expanded="true" /> </folding> </folding> Loading @@ -71,18 +75,6 @@ </provider> </provider> </entry> </entry> </file> </file> <file leaf-file-name="connect.h" pinned="false" current-in-tab="false"> <entry file="file://$PROJECT_DIR$/connect.h"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="270"> <caret line="15" column="22" selection-start-line="15" selection-start-column="22" selection-end-line="15" selection-end-column="22" /> <folding> <element signature="e#124#142#0" expanded="true" /> </folding> </state> </provider> </entry> </file> </leaf> </leaf> </component> </component> <component name="FindInProjectRecents"> <component name="FindInProjectRecents"> Loading @@ -105,10 +97,12 @@ <option value="$PROJECT_DIR$/CMakeLists.txt" /> <option value="$PROJECT_DIR$/CMakeLists.txt" /> <option value="$PROJECT_DIR$/README.md" /> <option value="$PROJECT_DIR$/README.md" /> <option value="$PROJECT_DIR$/connect.h" /> <option value="$PROJECT_DIR$/connect.h" /> <option value="$PROJECT_DIR$/main.c" /> <option value="$PROJECT_DIR$/connect.c" /> <option value="$PROJECT_DIR$/buffer.c" /> <option value="$PROJECT_DIR$/buffer.c" /> <option value="$PROJECT_DIR$/,gitignore" /> <option value="$PROJECT_DIR$/,gitignore" /> <option value="$PROJECT_DIR$/urlParse.c" /> <option value="$PROJECT_DIR$/urlParse.h" /> <option value="$PROJECT_DIR$/main.c" /> <option value="$PROJECT_DIR$/connect.c" /> </list> </list> </option> </option> </component> </component> Loading Loading @@ -166,8 +160,8 @@ </option> </option> </component> </component> <component name="RunManager" selected="Application.http_client"> <component name="RunManager" selected="Application.http_client"> <configuration name="Build All" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="coms352_project2_part1" RUN_TARGET_NAME="coms352_project2_part1" EXPLICIT_BUILD_TARGET_NAME="all" /> <configuration name="Build All" type="CMakeRunConfiguration" factoryName="Application" PASS_PARENT_ENVS_2="true" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="coms352_project2_part1" RUN_TARGET_NAME="http_client" EXPLICIT_BUILD_TARGET_NAME="all" /> <configuration name="http_client" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="www.cs.iastate.edu" PASS_PARENT_ENVS_2="true" PROJECT_NAME="coms352_project2_part1" TARGET_NAME="http_client" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="coms352_project2_part1" RUN_TARGET_NAME="http_client" /> <configuration name="http_client" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="www.google.com" PASS_PARENT_ENVS_2="true" PROJECT_NAME="coms352_project2_part1" TARGET_NAME="http_client" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="coms352_project2_part1" RUN_TARGET_NAME="http_client" /> <list> <list> <item itemvalue="Application.Build All" /> <item itemvalue="Application.Build All" /> <item itemvalue="Application.http_client" /> <item itemvalue="Application.http_client" /> Loading @@ -186,35 +180,36 @@ <workItem from="1520536552677" duration="1731000" /> <workItem from="1520536552677" duration="1731000" /> <workItem from="1522346739296" duration="3244000" /> <workItem from="1522346739296" duration="3244000" /> <workItem from="1523115745573" duration="9472000" /> <workItem from="1523115745573" duration="9472000" /> <workItem from="1523128673229" duration="3157000" /> <workItem from="1523128673229" duration="5207000" /> <workItem from="1523307294356" duration="902000" /> </task> </task> <servers /> <servers /> </component> </component> <component name="TimeTrackingManager"> <component name="TimeTrackingManager"> <option name="totallyTimeSpent" value="17604000" /> <option name="totallyTimeSpent" value="20556000" /> </component> </component> <component name="ToolWindowManager"> <component name="ToolWindowManager"> <frame x="0" y="27" width="2560" height="1573" extended-state="6" /> <frame x="0" y="27" width="2560" height="1573" extended-state="6" /> <editor active="true" /> <editor active="true" /> <layout> <layout> <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.12066246" /> <window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.12066246" /> <window_info anchor="bottom" id="TODO" order="6" /> <window_info anchor="bottom" id="TODO" order="6" /> <window_info anchor="bottom" id="Messages" order="7" weight="0.33053222" /> <window_info anchor="bottom" id="Messages" order="7" weight="0.33053222" /> <window_info anchor="bottom" id="CMake" order="7" /> <window_info anchor="bottom" id="CMake" order="7" /> <window_info anchor="bottom" id="Event Log" order="7" side_tool="true" /> <window_info anchor="bottom" id="Event Log" order="7" side_tool="true" /> <window_info anchor="bottom" id="Version Control" order="7" /> <window_info anchor="bottom" id="Run" order="2" weight="0.32843137" /> <window_info anchor="bottom" id="Run" order="2" weight="0.32843137" /> <window_info anchor="bottom" id="Version Control" order="7" /> <window_info id="Structure" order="1" side_tool="true" weight="0.25" /> <window_info id="Structure" order="1" side_tool="true" weight="0.25" /> <window_info anchor="bottom" id="Terminal" order="7" visible="true" weight="0.32983193" /> <window_info active="true" anchor="bottom" id="Terminal" order="7" visible="true" weight="0.33053222" /> <window_info id="Favorites" order="2" side_tool="true" /> <window_info anchor="bottom" id="Debug" order="3" weight="0.39985994" /> <window_info anchor="bottom" id="Debug" order="3" weight="0.39985994" /> <window_info id="Favorites" order="2" side_tool="true" /> <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" /> <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" /> <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" /> <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" /> <window_info anchor="right" id="Commander" order="0" weight="0.4" /> <window_info anchor="right" id="Commander" order="0" weight="0.4" /> <window_info anchor="right" id="Ant Build" order="1" weight="0.25" /> <window_info anchor="right" id="Ant Build" order="1" weight="0.25" /> <window_info anchor="bottom" id="Find" order="1" /> <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> <window_info anchor="bottom" id="Message" order="0" /> <window_info anchor="bottom" id="Message" order="0" /> <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> <window_info anchor="bottom" id="Find" order="1" /> </layout> </layout> </component> </component> <component name="TypeScriptGeneratedFilesManager"> <component name="TypeScriptGeneratedFilesManager"> Loading @@ -233,31 +228,21 @@ </line-breakpoint> </line-breakpoint> <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType"> <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType"> <url>file://$PROJECT_DIR$/connect.c</url> <url>file://$PROJECT_DIR$/connect.c</url> <line>112</line> <line>93</line> <option name="timeStamp" value="8" /> <option name="timeStamp" value="20" /> </line-breakpoint> <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType"> <url>file://$PROJECT_DIR$/connect.c</url> <line>105</line> <option name="timeStamp" value="16" /> </line-breakpoint> </line-breakpoint> <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType"> <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType"> <url>file://$PROJECT_DIR$/connect.c</url> <url>file://$PROJECT_DIR$/connect.c</url> <line>102</line> <line>115</line> <option name="timeStamp" value="17" /> <option name="timeStamp" value="22" /> </line-breakpoint> </line-breakpoint> <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType"> <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType"> <url>file://$PROJECT_DIR$/connect.c</url> <url>file://$PROJECT_DIR$/connect.c</url> <line>93</line> <line>103</line> <option name="timeStamp" value="20" /> <option name="timeStamp" value="24" /> </line-breakpoint> <line-breakpoint enabled="true" type="com.jetbrains.cidr.execution.debugger.OCBreakpointType"> <url>file://$PROJECT_DIR$/main.c</url> <line>57</line> <option name="timeStamp" value="21" /> </line-breakpoint> </line-breakpoint> </breakpoints> </breakpoints> <option name="time" value="22" /> <option name="time" value="25" /> </breakpoint-manager> </breakpoint-manager> </component> </component> <component name="debuggerHistoryManager"> <component name="debuggerHistoryManager"> Loading @@ -280,6 +265,36 @@ </expressions> </expressions> </component> </component> <component name="editorHistoryManager"> <component name="editorHistoryManager"> <entry file="file://$PROJECT_DIR$/buffer.c"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="180"> <caret line="10" column="20" selection-start-line="10" selection-start-column="20" selection-end-line="10" selection-end-column="20" /> <folding> <element signature="e#40#59#0" expanded="true" /> </folding> </state> </provider> </entry> <entry file="file://$PROJECT_DIR$/connect.c"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="144"> <caret line="8" column="3" lean-forward="true" selection-start-line="8" selection-start-column="3" selection-end-line="8" selection-end-column="3" /> <folding> <element signature="e#42#62#0" expanded="true" /> </folding> </state> </provider> </entry> <entry file="file://$PROJECT_DIR$/main.c"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="1296"> <caret line="72" column="44" selection-start-line="72" selection-start-column="44" selection-end-line="72" selection-end-column="44" /> <folding> <element signature="e#0#19#0" expanded="true" /> </folding> </state> </provider> </entry> <entry file="file://$PROJECT_DIR$/buffer.c"> <entry file="file://$PROJECT_DIR$/buffer.c"> <provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="630"> <state relative-caret-position="630"> Loading Loading @@ -423,6 +438,13 @@ </state> </state> </provider> </provider> </entry> </entry> <entry file="file://$PROJECT_DIR$/,gitignore"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="334"> <caret line="84" column="18" selection-start-line="84" selection-start-column="18" selection-end-line="84" selection-end-column="18" /> </state> </provider> </entry> <entry file="file://$PROJECT_DIR$/connect.h"> <entry file="file://$PROJECT_DIR$/connect.h"> <provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="270"> <state relative-caret-position="270"> Loading @@ -433,40 +455,50 @@ </state> </state> </provider> </provider> </entry> </entry> <entry file="file://$PROJECT_DIR$/main.c"> <entry file="file://$PROJECT_DIR$/buffer.c"> <provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="703"> <state relative-caret-position="180"> <caret line="57" selection-start-line="57" selection-end-line="57" /> <caret line="10" column="20" selection-start-line="10" selection-start-column="20" selection-end-line="10" selection-end-column="20" /> <folding> <folding> <element signature="e#0#19#0" expanded="true" /> <element signature="e#40#59#0" expanded="true" /> </folding> </folding> </state> </state> </provider> </provider> </entry> </entry> <entry file="file://$PROJECT_DIR$/buffer.c"> <entry file="file://$PROJECT_DIR$/urlParse.c"> <provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="435"> <state relative-caret-position="288"> <caret line="41" column="39" selection-start-line="41" selection-start-column="39" selection-end-line="41" selection-end-column="39" /> <caret line="16" selection-start-line="16" selection-end-line="18" selection-end-column="44" /> <folding> <folding> <element signature="e#40#59#0" expanded="true" /> <element signature="e#40#61#0" expanded="true" /> </folding> </folding> </state> </state> </provider> </provider> </entry> </entry> <entry file="file://$PROJECT_DIR$/connect.c"> <entry file="file://$PROJECT_DIR$/urlParse.h"> <provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="370"> <state relative-caret-position="108"> <caret line="71" column="27" selection-start-line="71" selection-start-column="27" selection-end-line="71" selection-end-column="27" /> <caret line="6" column="15" selection-start-line="6" selection-start-column="4" selection-end-line="6" selection-end-column="15" /> </state> </provider> </entry> <entry file="file://$PROJECT_DIR$/main.c"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="742"> <caret line="75" column="23" selection-start-line="75" selection-start-column="8" selection-end-line="75" selection-end-column="23" /> <folding> <folding> <element signature="e#42#62#0" expanded="true" /> <element signature="e#0#19#0" expanded="true" /> </folding> </folding> </state> </state> </provider> </provider> </entry> </entry> <entry file="file://$PROJECT_DIR$/,gitignore"> <entry file="file://$PROJECT_DIR$/connect.c"> <provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor"> <state relative-caret-position="334"> <state relative-caret-position="444"> <caret line="84" column="18" selection-start-line="84" selection-start-column="18" selection-end-line="84" selection-end-column="18" /> <caret line="75" column="27" selection-start-line="75" selection-start-column="27" selection-end-line="75" selection-end-column="27" /> <folding> <element signature="e#42#62#0" expanded="true" /> </folding> </state> </state> </provider> </provider> </entry> </entry> Loading
CMakeLists.txt +1 −1 Original line number Original line Diff line number Diff line Loading @@ -3,4 +3,4 @@ project(coms352_project2_part1 C) set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD 11) add_executable(http_client main.c connect.c connect.h buffer.c buffer.h) add_executable(http_client main.c connect.c connect.h buffer.c buffer.h urlParse.c urlParse.h) No newline at end of file No newline at end of file
connect.c +3 −3 Original line number Original line Diff line number Diff line Loading @@ -73,9 +73,9 @@ int execate_request(int socketfd, char *hostname, char *path, int head) { // Figure out the verb // Figure out the verb char *firstLine; char *firstLine; if (head) { if (head) { firstLine = "HEAD "; firstLine = "HEAD /"; } else { } else { firstLine = "GET "; firstLine = "GET /"; } } // Building verb part // Building verb part appendBuffer(&request, firstLine, strlen(firstLine)); appendBuffer(&request, firstLine, strlen(firstLine)); Loading
main.c +29 −2 Original line number Original line Diff line number Diff line Loading @@ -4,12 +4,16 @@ #include <ctype.h> #include <ctype.h> #include "connect.h" #include "connect.h" #include "buffer.h" #include "buffer.h" #include "urlParse.h" /// Main method for the program /// Main method for the program /// /// /// \param argc /// \param argc /// \param argv /// \param argv /// \return /// \return void show_help_exit(char *argv); int main (int argc, char **argv) { int main (int argc, char **argv) { int header_only = 0; int header_only = 0; int timeDelta = 0; int timeDelta = 0; Loading @@ -20,6 +24,10 @@ int main (int argc, char **argv) { opterr = 0; opterr = 0; if (argc < 2) { show_help_exit(argv[0]); } // getopts section based on // getopts section based on // https://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html#Example-of-Getopt // https://www.gnu.org/software/libc/manual/html_node/Example-of-Getopt.html#Example-of-Getopt while ((c = getopt(argc, argv, "hd:")) != -1) while ((c = getopt(argc, argv, "hd:")) != -1) Loading Loading @@ -52,12 +60,31 @@ int main (int argc, char **argv) { for (index = optind; index < argc; index++) for (index = optind; index < argc; index++) printf("Non-option argument %s\n", argv[index]); printf("Non-option argument %s\n", argv[index]); printf("\noptind: %s\n", (argv[optind])); if (argv[optind] == NULL) { show_help_exit(argv[0]); } init_connection(argv[optind], 80, &addressInfo); char *host = malloc(sizeof(char) * 256); int port = 80; char *page = malloc(sizeof(char) * 256); getUrlParts(argv[optind], &host, &port, &page); printf("\nhost: %s\n", host); init_connection(host, 80, &addressInfo); int sockfd = establish_connect(addressInfo); int sockfd = establish_connect(addressInfo); execate_request(sockfd, "www.cs.iastate.edu", "/index.html", 0); if (header_only == 1) { execate_request(sockfd, host, page, 1); } else { execate_request(sockfd, host, page, 0); } GrowthBuffer gp; GrowthBuffer gp; initBuffer(&gp, 50); initBuffer(&gp, 50); get_result(sockfd, &gp, RECV_SIZE); get_result(sockfd, &gp, RECV_SIZE); printf("%s", gp.array); printf("%s", gp.array); } } void show_help_exit(char *argv) { fprintf(stderr, "\n%s [–h] [–d <time-interval>] <URL>", argv); exit(EXIT_FAILURE); } No newline at end of file
urlParse.c 0 → 100644 +37 −0 Original line number Original line Diff line number Diff line // // Created by mburket on 4/9/18. // #include "urlParse.h" #include <stdlib.h> #include <stdio.h> #include <string.h> /// Gets the parts of a url from a string /// /// \param url the full string of the url /// \param rhost return host /// \param rport return port /// \param rpage return /// \return 0 if success int getUrlParts(char *url, char **rhost, int *rport, char **rpage) { char *host = malloc(sizeof(char) * 256); int port = 80; char *page = malloc(sizeof(char) * 256); for (int i = 0; i < 100; i++) { page[0] = '\0'; } // I know this bad // But it works somewhat // Idea from https://stackoverflow.com/a/726214 if (sscanf(url, "http://%99[^:]:%99d/%99[^\n]", host, &port, page) == 3) { } else { sscanf(url, "http://%99[^/]/%99[^\n]", host, page); } strcpy(*rhost, host); *rport = port; strcpy(*rpage, page); free(page); free(host); return 0; }