Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
BIND
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
600
Issues
600
List
Boards
Labels
Service Desk
Milestones
Merge Requests
110
Merge Requests
110
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ISC Open Source Projects
BIND
Commits
438d7099
Commit
438d7099
authored
May 14, 1999
by
Michael Graff
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implement name, rdata, rdatalist, rdataset loanout from message resources
parent
97e7d389
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
240 additions
and
10 deletions
+240
-10
lib/dns/include/dns/message.h
lib/dns/include/dns/message.h
+138
-0
lib/dns/message.c
lib/dns/message.c
+102
-10
No files found.
lib/dns/include/dns/message.h
View file @
438d7099
...
...
@@ -476,6 +476,144 @@ dns_message_addname(dns_message_t *msg, dns_name_t *name,
* 'section' be a named section.
*/
/*
* LOANOUT FUNCTIONS
*
* Each of these functions loan a particular type of data to the caller.
* The storage for these will vanish when the message is destroyed or
* reset, and must NOT be used after these operations.
*/
dns_result_t
dns_message_gettempname
(
dns_message_t
*
msg
,
dns_name_t
**
item
);
/*
* Return a name that can be used for any temporary purpose, including
* inserting into the message's linked lists. The storage associated with
* this name will be destroyed when the message is destroyed or reset.
*
* It is the caller's responsibility to initialize this name.
*
* Requires:
* msg be a valid message
*
* item != NULL && *item == NULL
*
* Returns:
* DNS_R_SUCCESS -- All is well.
* DNS_R_NOMEMORY -- No item can be allocated.
*/
dns_result_t
dns_message_gettemprdata
(
dns_message_t
*
msg
,
dns_rdata_t
**
item
);
/*
* Return a rdata that can be used for any temporary purpose, including
* inserting into the message's linked lists. The storage associated with
* this rdata will be destroyed when the message is destroyed or reset.
*
* Requires:
* msg be a valid message
*
* item != NULL && *item == NULL
*
* Returns:
* DNS_R_SUCCESS -- All is well.
* DNS_R_NOMEMORY -- No item can be allocated.
*/
dns_result_t
dns_message_gettemprdataset
(
dns_message_t
*
msg
,
dns_rdataset_t
**
item
);
/*
* Return a rdataset that can be used for any temporary purpose, including
* inserting into the message's linked lists. The storage associated with
* this rdataset will be destroyed when the message is destroyed or reset.
*
* Requires:
* msg be a valid message
*
* item != NULL && *item == NULL
*
* Returns:
* DNS_R_SUCCESS -- All is well.
* DNS_R_NOMEMORY -- No item can be allocated.
*/
dns_result_t
dns_message_gettemprdatalist
(
dns_message_t
*
msg
,
dns_rdatalist_t
**
item
);
/*
* Return a rdatalist that can be used for any temporary purpose, including
* inserting into the message's linked lists. The storage associated with
* this rdatalist will be destroyed when the message is destroyed or reset.
*
* Requires:
* msg be a valid message
*
* item != NULL && *item == NULL
*
* Returns:
* DNS_R_SUCCESS -- All is well.
* DNS_R_NOMEMORY -- No item can be allocated.
*/
void
dns_message_puttempname
(
dns_message_t
*
msg
,
dns_name_t
**
item
);
/*
* Return a borrowed name to the message's name free list.
*
* Requires:
* msg be a valid message
*
* item != NULL && *item point to a name returned by
* dns_message_gettempname()
*
* Ensures:
* *item == NULL
*/
void
dns_message_puttemprdata
(
dns_message_t
*
msg
,
dns_rdata_t
**
item
);
/*
* Return a borrowed rdata to the message's rdata free list.
*
* Requires:
* msg be a valid message
*
* item != NULL && *item point to a rdata returned by
* dns_message_gettemprdata()
*
* Ensures:
* *item == NULL
*/
void
dns_message_puttemprdataset
(
dns_message_t
*
msg
,
dns_rdataset_t
**
item
);
/*
* Return a borrowed rdataset to the message's rdataset free list.
*
* Requires:
* msg be a valid message
*
* item != NULL && *item point to a rdataset returned by
* dns_message_gettemprdataset()
*
* Ensures:
* *item == NULL
*/
void
dns_message_puttemprdatalist
(
dns_message_t
*
msg
,
dns_rdatalist_t
**
item
);
/*
* Return a borrowed rdatalist to the message's rdatalist free list.
*
* Requires:
* msg be a valid message
*
* item != NULL && *item point to a rdatalist returned by
* dns_message_gettemprdatalist()
*
* Ensures:
* *item == NULL
*/
ISC_LANG_ENDDECLS
#endif
/* DNS_DNS_H */
lib/dns/message.c
View file @
438d7099
...
...
@@ -470,7 +470,7 @@ msgreset(dns_message_t *msg, isc_boolean_t everything)
}
dns_result_t
dns_message_create
(
isc_mem_t
*
mctx
,
dns_message_t
**
msg
,
unsigned
int
intent
)
dns_message_create
(
isc_mem_t
*
mctx
,
dns_message_t
**
msg
p
,
unsigned
int
intent
)
{
dns_message_t
*
m
;
isc_result_t
iresult
;
...
...
@@ -479,8 +479,8 @@ dns_message_create(isc_mem_t *mctx, dns_message_t **msg, unsigned int intent)
unsigned
int
i
;
REQUIRE
(
mctx
!=
NULL
);
REQUIRE
(
msg
!=
NULL
);
REQUIRE
(
*
msg
==
NULL
);
REQUIRE
(
msg
p
!=
NULL
);
REQUIRE
(
*
msg
p
==
NULL
);
REQUIRE
(
intent
==
DNS_MESSAGE_INTENTPARSE
||
intent
==
DNS_MESSAGE_INTENTRENDER
);
...
...
@@ -532,7 +532,7 @@ dns_message_create(isc_mem_t *mctx, dns_message_t **msg, unsigned int intent)
ISC_LIST_APPEND
(
m
->
rdatalists
,
msgblock
,
link
);
}
*
msg
=
m
;
*
msg
p
=
m
;
return
(
DNS_R_SUCCESS
);
/*
...
...
@@ -564,15 +564,15 @@ dns_message_reset(dns_message_t *msg)
}
void
dns_message_destroy
(
dns_message_t
**
xmsg
)
dns_message_destroy
(
dns_message_t
**
msgp
)
{
dns_message_t
*
msg
;
REQUIRE
(
xmsg
!=
NULL
);
REQUIRE
(
VALID_MESSAGE
(
*
xmsg
));
REQUIRE
(
msgp
!=
NULL
);
REQUIRE
(
VALID_MESSAGE
(
*
msgp
));
msg
=
*
xmsg
;
*
xmsg
=
NULL
;
msg
=
*
msgp
;
*
msgp
=
NULL
;
msgreset
(
msg
,
ISC_TRUE
);
msg
->
magic
=
0
;
...
...
@@ -1150,7 +1150,7 @@ dns_message_renderreserve(dns_message_t *msg, unsigned int space)
dns_result_t
dns_message_rendersection
(
dns_message_t
*
msg
,
dns_section_t
sectionid
,
unsigned
int
priority
,
unsigned
int
flag
s
)
unsigned
int
priority
,
unsigned
int
option
s
)
{
unsigned
int
used
;
dns_namelist_t
*
section
;
...
...
@@ -1380,3 +1380,95 @@ dns_message_addname(dns_message_t *msg, dns_name_t *name,
ISC_LIST_APPEND
(
msg
->
sections
[
section
],
name
,
link
);
}
dns_result_t
dns_message_gettempname
(
dns_message_t
*
msg
,
dns_name_t
**
item
)
{
REQUIRE
(
VALID_MESSAGE
(
msg
));
REQUIRE
(
item
!=
NULL
&&
*
item
==
NULL
);
*
item
=
newname
(
msg
);
if
(
*
item
==
NULL
)
return
(
DNS_R_NOMEMORY
);
return
(
DNS_R_SUCCESS
);
}
dns_result_t
dns_message_gettemprdata
(
dns_message_t
*
msg
,
dns_rdata_t
**
item
)
{
REQUIRE
(
VALID_MESSAGE
(
msg
));
REQUIRE
(
item
!=
NULL
&&
*
item
==
NULL
);
*
item
=
newrdata
(
msg
);
if
(
*
item
==
NULL
)
return
(
DNS_R_NOMEMORY
);
return
(
DNS_R_SUCCESS
);
}
dns_result_t
dns_message_gettemprdataset
(
dns_message_t
*
msg
,
dns_rdataset_t
**
item
)
{
REQUIRE
(
VALID_MESSAGE
(
msg
));
REQUIRE
(
item
!=
NULL
&&
*
item
==
NULL
);
*
item
=
newrdataset
(
msg
);
if
(
*
item
==
NULL
)
return
(
DNS_R_NOMEMORY
);
return
(
DNS_R_SUCCESS
);
}
dns_result_t
dns_message_gettemprdatalist
(
dns_message_t
*
msg
,
dns_rdatalist_t
**
item
)
{
REQUIRE
(
VALID_MESSAGE
(
msg
));
REQUIRE
(
item
!=
NULL
&&
*
item
==
NULL
);
*
item
=
newrdatalist
(
msg
);
if
(
*
item
==
NULL
)
return
(
DNS_R_NOMEMORY
);
return
(
DNS_R_SUCCESS
);
}
void
dns_message_puttempname
(
dns_message_t
*
msg
,
dns_name_t
**
item
)
{
REQUIRE
(
VALID_MESSAGE
(
msg
));
REQUIRE
(
item
!=
NULL
&&
*
item
!=
NULL
);
releasename
(
msg
,
*
item
);
*
item
=
NULL
;
}
void
dns_message_puttemprdata
(
dns_message_t
*
msg
,
dns_rdata_t
**
item
)
{
REQUIRE
(
VALID_MESSAGE
(
msg
));
REQUIRE
(
item
!=
NULL
&&
*
item
!=
NULL
);
releaserdata
(
msg
,
*
item
);
*
item
=
NULL
;
}
void
dns_message_puttemprdataset
(
dns_message_t
*
msg
,
dns_rdataset_t
**
item
)
{
REQUIRE
(
VALID_MESSAGE
(
msg
));
REQUIRE
(
item
!=
NULL
&&
*
item
!=
NULL
);
releaserdataset
(
msg
,
*
item
);
*
item
=
NULL
;
}
void
dns_message_puttemprdatalist
(
dns_message_t
*
msg
,
dns_rdatalist_t
**
item
)
{
REQUIRE
(
VALID_MESSAGE
(
msg
));
REQUIRE
(
item
!=
NULL
&&
*
item
!=
NULL
);
releaserdatalist
(
msg
,
*
item
);
*
item
=
NULL
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment