Package ghidra.framework.protocol.ghidra
Class GhidraURLConnection
java.lang.Object
java.net.URLConnection
ghidra.framework.protocol.ghidra.GhidraURLConnection
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic enum
Connection status codes -
Field Summary
Modifier and TypeFieldDescriptionstatic final String
Ghidra content type - domain folder/file wrapped within GhidraURLWrappedContent object.static final String
Ghidra content type - repository server in the form of a RepositoryAdapterFields inherited from class java.net.URLConnection
allowUserInteraction, connected, doInput, doOutput, ifModifiedSince, url, useCaches
-
Constructor Summary
ConstructorDescriptionGhidraURLConnection
(URL ghidraUrl) Construct a Ghidra URL connection which uses the default handler without any extension protocol.GhidraURLConnection
(URL url, GhidraProtocolHandler protocolHandler) Construct a Ghidra URL connection which requires an Ghidra protocol extension -
Method Summary
Modifier and TypeMethodDescriptionvoid
connect()
Get content associated with the URLGets the repository folder item name associated with this connection.Gets the repository folder path associated with this connection.If URL connects and corresponds to a valid repository or local project, this method may be used to obtain the associated ProjectData object.Gets the repository name associated with thisGhidraURLConnection
.Gets the status code from a Ghidra URL connect attempt.boolean
Connection was opened as read-onlyvoid
setReadOnly
(boolean state) Set the read-only state for this connection prior to connecting or getting content.Methods inherited from class java.net.URLConnection
addRequestProperty, getAllowUserInteraction, getConnectTimeout, getContent, getContentEncoding, getContentLength, getContentLengthLong, getDate, getDefaultAllowUserInteraction, getDefaultRequestProperty, getDefaultUseCaches, getDefaultUseCaches, getDoInput, getDoOutput, getExpiration, getFileNameMap, getHeaderField, getHeaderField, getHeaderFieldDate, getHeaderFieldInt, getHeaderFieldKey, getHeaderFieldLong, getHeaderFields, getIfModifiedSince, getLastModified, getPermission, getReadTimeout, getRequestProperties, getRequestProperty, getURL, getUseCaches, guessContentTypeFromName, guessContentTypeFromStream, setAllowUserInteraction, setConnectTimeout, setContentHandlerFactory, setDefaultAllowUserInteraction, setDefaultRequestProperty, setDefaultUseCaches, setDefaultUseCaches, setDoInput, setDoOutput, setFileNameMap, setIfModifiedSince, setReadTimeout, setRequestProperty, setUseCaches, toString
-
Field Details
-
GHIDRA_WRAPPED_CONTENT
Ghidra content type - domain folder/file wrapped within GhidraURLWrappedContent object.- See Also:
-
REPOSITORY_SERVER_CONTENT
Ghidra content type - repository server in the form of a RepositoryAdapter- See Also:
-
-
Constructor Details
-
GhidraURLConnection
Construct a Ghidra URL connection which uses the default handler without any extension protocol.- Parameters:
ghidraUrl
- ghidra protocol URL (e.g., ghidra://server/repo)- Throws:
MalformedURLException
- if URL is invalid
-
GhidraURLConnection
public GhidraURLConnection(URL url, GhidraProtocolHandler protocolHandler) throws MalformedURLException Construct a Ghidra URL connection which requires an Ghidra protocol extension- Parameters:
url
- extension URL without the ghidra protocol prefix (e.g., http://server/repo)protocolHandler
- Ghidra protocol extension handler- Throws:
MalformedURLException
- if URL is invalid
-
-
Method Details
-
isReadOnly
public boolean isReadOnly()Connection was opened as read-only- Returns:
- true if read-only connection
-
setReadOnly
public void setReadOnly(boolean state) Set the read-only state for this connection prior to connecting or getting content. The default access is read-only. Extreme care must be taken when setting the state to false for local projects without the use of a ProjectLock.NOTE: Local project URL connections only support read-only access.
- Parameters:
state
- read-only if true, otherwise read-write- Throws:
UnsupportedOperationException
- if an attempt is made to enable write access for a local project URL.IllegalStateException
- if already connected
-
getRepositoryName
Gets the repository name associated with thisGhidraURLConnection
.- Returns:
- the repository name or null if URL does not identify a specific repository
-
getFolderPath
Gets the repository folder path associated with this connection. If an ambiguous path has been specified, the folder path may change after a connection is established (e.g., folder item name will be appended to folder path and item name will become null if item turns out to be a folder).- Returns:
- repository folder path or null
-
getFolderItemName
Gets the repository folder item name associated with this connection. If an ambiguous path has been specified, the folder item name may become null after a connection is established (e.g., folder item name will be appended to folder path and item name will become null if item turns out to be a folder).- Returns:
- folder item name or null
-
getStatusCode
Gets the status code from a Ghidra URL connect attempt.- Returns:
- the Ghidra connection status code or null
- Throws:
IOException
- if an error occurred connecting to the server.
-
getContentType
- Overrides:
getContentType
in classURLConnection
-
getContent
Get content associated with the URL- Overrides:
getContent
in classURLConnection
- Returns:
- URL content generally in the form of GhidraURLWrappedContent, although other special cases may result in different content (Example: a server-only URL could result in content class of RepositoryServerAdapter).
- Throws:
IOException
- if an IO error occurs
-
getProjectData
If URL connects and corresponds to a valid repository or local project, this method may be used to obtain the associated ProjectData object. The caller is responsible for properlyclosing
the returned project data instance when no longer in-use, failure to do so may prevent release of repository handle to server until process exits. It is important thatProjectData.close()
is invoked once, and only once, per call to this method to ensure project "use" tracking is properly maintained. Improperly invoking the close method on a shared transientProjectData
instance may cause the underlying storage to be prematurely disposed.- Returns:
- project data which corresponds to this connection or null if unavailable
- Throws:
IOException
- if an IO error occurs
-
connect
- Specified by:
connect
in classURLConnection
- Throws:
IOException
-
getInputStream
- Overrides:
getInputStream
in classURLConnection
- Throws:
IOException
-
getOutputStream
- Overrides:
getOutputStream
in classURLConnection
- Throws:
IOException
-