]> git.saurik.com Git - apple/security.git/blobdiff - SecurityTests/clxutils/simpleUrlAccess/simpleUrlAccess.c
Security-57031.1.35.tar.gz
[apple/security.git] / SecurityTests / clxutils / simpleUrlAccess / simpleUrlAccess.c
diff --git a/SecurityTests/clxutils/simpleUrlAccess/simpleUrlAccess.c b/SecurityTests/clxutils/simpleUrlAccess/simpleUrlAccess.c
new file mode 100644 (file)
index 0000000..77e2949
--- /dev/null
@@ -0,0 +1,185 @@
+/*
+ * URLSimpleDownload test, X version.
+ */
+#include <stdlib.h>
+#include <stdio.h>
+#include <Carbon/Carbon.h>
+#include <time.h>
+#include <string.h>
+#include <ctype.h>
+
+#define DEFAULT_HOST           "gss.cdnow.com"
+#define DEFAULT_PATH           "/"
+#define DEFAULT_SSL                    0               /* 0 --> http, 1 --> https */
+
+#define COMP_LENGTH            80
+#define URL_LENGTH             256
+
+
+/* shouldn't be needed if no kURLDisplayProgressFlag */
+static void Initialize()                                       
+{
+       //InitGraf(&qd.thePort);
+       //InitWindows();
+       //InitCursor();
+       //InitMenus();
+       //InitFonts();
+}
+
+
+
+#if 0
+static time_t lastTime = (time_t)0;
+#define TIME_INTERVAL          3
+/*
+ * Just  keep UI alive in case we want to quit the app
+ */
+static pascal OSStatus eventCallback(
+     void* userContext,
+     EventRecord *event)
+{
+       time_t thisTime = time(0);
+       
+       if((thisTime - lastTime) >= TIME_INTERVAL) {
+               printf("."); fflush(stdout);
+               lastTime = thisTime;
+       }
+       return noErr;
+}
+#endif
+
+/*
+ * Assuming *h contains ASCII text, dump it 'til the user cries uncle.
+ */
+#define BYTES_PER_SPURT                128
+
+static void 
+dumpText(Handle h)
+{
+       Size    totalBytes;
+       Size    bytesWritten = 0;
+       Ptr             p;
+       Size    thisWrite;
+       Size    i;
+       char    resp;
+       char    c;
+       char    lastWasHex = 0;
+       
+       HLock(h);
+       totalBytes = GetHandleSize(h);
+       if(totalBytes == 0) {
+               printf("*** Zero bytes obtained\n");
+               return;
+       }
+       p = *h;
+       while(bytesWritten < totalBytes) {
+               thisWrite = totalBytes - bytesWritten;
+               if(thisWrite > BYTES_PER_SPURT) {
+                       thisWrite = BYTES_PER_SPURT;
+               }
+               for(i=0; i<thisWrite; i++) {
+                       c = *p++;
+                       if(isprint(c)) {
+                               printf("%c", c);
+                               lastWasHex = 0;
+                       }
+                       else {
+                               if(!lastWasHex) {
+                                       printf("|");
+                               }
+                               printf("%02X|", (unsigned)c & 0xff);
+                               lastWasHex = 1;
+                       }
+               }
+               totalBytes += thisWrite;
+               if(totalBytes == bytesWritten) {
+                       printf("\n");
+                       break;
+               }
+               printf("\nMore (y/anything)? ");
+               fpurge(stdin);
+               resp = getchar();
+               if(resp != 'y') {
+                       break;
+               }       
+       }
+       HUnlock(h);
+       return;
+}
+
+int main()
+{
+       Handle          h;
+       char            hostName[COMP_LENGTH];
+       char            path[COMP_LENGTH];
+       char            url[URL_LENGTH];
+       char            scheme[10];                     /* http, https */
+       char            isSsl = DEFAULT_SSL;
+       char            resp;
+       OSStatus        ortn;
+       
+       Initialize();
+       strcpy(hostName, DEFAULT_HOST);
+       strcpy(path, DEFAULT_PATH);
+       if(isSsl) {
+               strcpy(scheme, "https");
+       }
+       else {
+               strcpy(scheme, "http");
+       }
+       while(1) {
+               printf("  h   Set Host      (current = %s)\n", hostName);
+               printf("  p   Set path      (current = %s)\n", path);
+               printf("  s   Set SSL true  (current = %d)\n", isSsl);
+               printf("  S   Set SSL false\n");
+               printf("  g   Get the URL\n");
+               printf("  q   quit\n");
+               printf("\nEnter command: ");
+               fpurge(stdin);
+               resp = getchar();
+               switch(resp) {
+                       case 'h':       
+                               printf("Enter host name: ");
+                               scanf("%s", hostName);
+                               break;
+                       case 'p':
+                               printf("Enter path: ");
+                               scanf("%s", path);
+                               break;
+                       case 's':
+                               isSsl = 1;
+                               strcpy(scheme, "https");
+                               break;
+                       case 'S':
+                               isSsl = 0;
+                               strcpy(scheme, "http");
+                               break;
+                       case 'g':
+                               sprintf(url, "%s://%s%s", scheme, hostName, path);
+                               printf("...url = %s\n", url);
+                               h = NewHandle(0);                               /* what the spec says */
+                               ortn = URLSimpleDownload(url,
+                                       NULL,
+                                       h,
+                                       0,      //kURLDisplayProgressFlag,                                      // URLOpenFlags
+                                       NULL,           //eventCallback,
+                                       NULL);                          // userContext
+                               if(ortn) {
+                                       printf("URLSimpleDownload returned %d\n", (int)ortn);
+                               }
+                               else {
+                                       dumpText(h);
+                               }
+                               DisposeHandle(h);
+                               break;
+                       case 'q':
+                               goto done;
+                       default:
+                               printf("Huh?\n");
+                               continue;
+               }
+               
+       }
+done:
+       return 0;
+}