Add extremely basic support for ASPX pages
diff --git a/src/com/google/enterprise/adaptor/sharepoint/SharePointAdaptor.java b/src/com/google/enterprise/adaptor/sharepoint/SharePointAdaptor.java
index 4f67b74..288c3e5 100644
--- a/src/com/google/enterprise/adaptor/sharepoint/SharePointAdaptor.java
+++ b/src/com/google/enterprise/adaptor/sharepoint/SharePointAdaptor.java
@@ -213,8 +213,14 @@
       SiteDataStub.GetURLSegmentsResponse urlResponse
           = getUrlSegments(request.getDocId().getUniqueId());
       if (!urlResponse.getGetURLSegmentsResult()) {
-        log.log(Level.FINE, "responding not found");
-        response.respondNotFound();
+        // It may still be an aspx page.
+        if (request.getDocId().getUniqueId().toLowerCase(Locale.ENGLISH)
+            .endsWith(".aspx")) {
+          getAspxDocContent(request, response);
+        } else {
+          log.log(Level.FINE, "responding not found");
+          response.respondNotFound();
+        }
         log.exiting("SiteDataClient", "getDocContent");
         return;
       }
@@ -476,6 +482,42 @@
       }
     }
 
+    private void getAspxDocContent(Request request, Response response)
+        throws Exception {
+      log.entering("SiteDataClient", "getAspxDocContent",
+          new Object[] {request, response});
+      getFileDocContent(request, response);
+      log.exiting("SiteDataClient", "getAspxDocContent");
+    }
+
+    /**
+     * Blindly retrieve contents of DocId as if it were a file's URL. To prevent
+     * security issues, this should only be used after the DocId has been
+     * verified to be a valid document on the SharePoint instance. In addition,
+     * ACLs and other metadata and security measures should be set before making
+     * this call.
+     */
+    private void getFileDocContent(Request request, Response response)
+        throws Exception {
+      log.entering("SiteDataClient", "getFileDocContent",
+          new Object[] {request, response});
+      String url = request.getDocId().getUniqueId();
+      String[] parts = url.split("/", 4);
+      url = parts[0] + "/" + parts[1] + "/" + parts[2] + "/" +
+          new URI(null, null, parts[3], null).toASCIIString();
+      GetMethod method = new GetMethod(url);
+      int statusCode = httpClient.executeMethod(method);
+      if (statusCode != HttpStatus.SC_OK) {
+        IOException ioe = new IOException("Got status code: " + statusCode);
+        log.throwing("SiteDataClient", "getFileDocContent", ioe);
+        throw ioe;
+      }
+      InputStream is = method.getResponseBodyAsStream();
+      IOHelper.copyStream(is, response.getOutputStream());
+      method.releaseConnection();
+      log.exiting("SiteDataClient", "getFileDocContent");
+    }
+
     private void getListItemDocContent(Request request, Response response,
         String listId, String itemId) throws Exception {
       log.entering("SiteDataClient", "getListItemDocContent",
@@ -516,17 +558,7 @@
       // TODO(ejona): This is likely unreliable. Investigate a better way.
       if ("Document".equals(contentType)) {
         // This is a file, so display its contents.
-        String url = request.getDocId().getUniqueId();
-        String[] parts = url.split("/", 4);
-        url = parts[0] + "/" + parts[1] + "/" + parts[2] + "/" +
-            new URI(null, null, parts[3], null).toASCIIString();
-        GetMethod method = new GetMethod(url);
-        int statusCode = httpClient.executeMethod(method);
-        if (statusCode != HttpStatus.SC_OK) {
-          throw new IOException("Got status code: " + statusCode);
-        }
-        InputStream is = method.getResponseBodyAsStream();
-        IOHelper.copyStream(is, response.getOutputStream());
+        getFileDocContent(request, response);
       } else {
         // Some list item.
         response.setContentType("text/html");