Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include <osl/diagnose.h>
30 : : #include <com/sun/star/beans/PropertyValue.hpp>
31 : : #include <com/sun/star/beans/PropertyState.hpp>
32 : : #include "NeonHeadRequest.hxx"
33 : :
34 : : using namespace webdav_ucp;
35 : : using namespace com::sun::star;
36 : :
37 : : namespace {
38 : :
39 : 0 : void process_headers( ne_request * req,
40 : : DAVResource & rResource,
41 : : const std::vector< ::rtl::OUString > & rHeaderNames )
42 : : {
43 : 0 : void * cursor = NULL;
44 : : const char * name, *value;
45 : :
46 [ # # ][ # # ]: 0 : while ( ( cursor = ne_response_header_iterate( req, cursor,
47 : : &name, &value ) ) != NULL ) {
48 : 0 : rtl::OUString aHeaderName( rtl::OUString::createFromAscii( name ) );
49 : 0 : rtl::OUString aHeaderValue( rtl::OUString::createFromAscii( value ) );
50 : :
51 : : // Note: Empty vector means that all headers are requested.
52 : 0 : bool bIncludeIt = ( rHeaderNames.empty() );
53 : :
54 [ # # ]: 0 : if ( !bIncludeIt )
55 : : {
56 : : // Check whether this header was requested.
57 : : std::vector< ::rtl::OUString >::const_iterator it(
58 : 0 : rHeaderNames.begin() );
59 : : const std::vector< ::rtl::OUString >::const_iterator end(
60 : 0 : rHeaderNames.end() );
61 : :
62 [ # # ][ # # ]: 0 : while ( it != end )
63 : : {
64 [ # # ]: 0 : if ( (*it) == aHeaderName )
65 : 0 : break;
66 : :
67 : 0 : ++it;
68 : : }
69 : :
70 [ # # ][ # # ]: 0 : if ( it != end )
71 : 0 : bIncludeIt = true;
72 : : }
73 : :
74 [ # # ]: 0 : if ( bIncludeIt )
75 : : {
76 : : // Create & set the PropertyValue
77 : 0 : DAVPropertyValue thePropertyValue;
78 : 0 : thePropertyValue.Name = aHeaderName;
79 : 0 : thePropertyValue.IsCaseSensitive = false;
80 [ # # ]: 0 : thePropertyValue.Value <<= aHeaderValue;
81 : :
82 : : // Add the newly created PropertyValue
83 [ # # ]: 0 : rResource.properties.push_back( thePropertyValue );
84 : : }
85 : 0 : }
86 : 0 : }
87 : :
88 : : } // namespace
89 : :
90 : : // -------------------------------------------------------------------
91 : : // Constructor
92 : : // -------------------------------------------------------------------
93 : :
94 : : extern osl::Mutex aGlobalNeonMutex;
95 : :
96 : 0 : NeonHeadRequest::NeonHeadRequest( HttpSession * inSession,
97 : : const rtl::OUString & inPath,
98 : : const std::vector< ::rtl::OUString > &
99 : : inHeaderNames,
100 : : DAVResource & ioResource,
101 : : int & nError )
102 : : {
103 : 0 : ioResource.uri = inPath;
104 : 0 : ioResource.properties.clear();
105 : :
106 : : // Create and dispatch HEAD request. Install catcher for all response
107 : : // header fields.
108 : : ne_request * req = ne_request_create( inSession,
109 : : "HEAD",
110 : : rtl::OUStringToOString(
111 : : inPath,
112 [ # # ]: 0 : RTL_TEXTENCODING_UTF8 ).getStr() );
113 : :
114 : : {
115 [ # # ]: 0 : osl::Guard< osl::Mutex > theGlobalGuard( aGlobalNeonMutex );
116 [ # # ][ # # ]: 0 : nError = ne_request_dispatch( req );
117 : : }
118 : :
119 : 0 : process_headers( req, ioResource, inHeaderNames );
120 : :
121 [ # # ][ # # ]: 0 : if ( nError == NE_OK && ne_get_status( req )->klass != 2 )
122 : 0 : nError = NE_ERROR;
123 : :
124 : 0 : ne_request_destroy( req );
125 : 0 : }
126 : :
127 : : // -------------------------------------------------------------------
128 : : // Destructor
129 : : // -------------------------------------------------------------------
130 : 0 : NeonHeadRequest::~NeonHeadRequest()
131 : : {
132 : 0 : }
133 : :
134 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|